From 55fcc09988b374ced2da6b3d4c06265b6e1d5560 Mon Sep 17 00:00:00 2001 From: AntonD3 <74021421+AntonD3@users.noreply.github.com> Date: Thu, 7 Dec 2023 00:58:07 +0800 Subject: [PATCH] feat: boojum integration merge main (#233) * chore: adds proper null response to zks_batchDetails method (#152) * fix: add back call stacks, console logs, and correct call stack count (#155) * fix: add back call stacks, console logs, and correct call stack count * Add comments. Fix typo. * fix lint * feat: add eth_getStorageAt (#134) * add get_storage_at * add eth_getStorageAt * limit max archived blocks to 128 * remove ethers-contract dep * feat: add evm_snapshot/revert (#158) * fix: update compiled smart contracts to latest (#157) * Update compile smart contracts checked into source * Hide Notes section of PR template by default * Update e2e tests to also be run on MacOS * Add commented link to YouTube video at the top of release notes * Limit rust/clippy linting to only the era_test_node package/crate * Re-enable e2e test for zks_estimateFee * Add more trace level logs for gas estimation * feat: add eth_getTransactionByBlockHashAndIndex and eth_getTransactionByBlockNumberAndIndex (#159) * feat: add eth_protocolVersion (#161) * feat: impl debug_traceCall (#151) * feat: impl debug_traceCall * feat: adds test contract dir * add refresh_test_contracts in Makefile * fix: rename contacts_for_l2_call -> contracts_for_l2_call * move not_implemented() to crate::utils, replace usage of macro --------- Co-authored-by: Nicolas Villanueva * feat: Add well-known log selectors to console output (#162) * add aarch64-unknown-linux-gnu target (#164) * feat: add rustbook (#163) * fix: install mdbook for ci (#169) * feat: impl debug_traceTransaction (#165) * feat: impl `debug_traceBlockByHash` and `debug_traceBlockByNumber` (#168) * fix: update zksync-era deps to v16.0.0 (#173) * chore: remove hub usage in favour of gh for draft releases (#175) * feat: add hardhat_setCode (#171) * feat: impl `zks_getTransactionDetails` (#176) * feat: forbid ".only" from e2e-tests (#179) * feat: impl zks_getBlockDetails (#182) * feat: support builtInWithoutSecurity option (#186) * feat: add zks_getBridgeContracts (#184) * feat: add zks_getBytecodeByHash (#180) * feat: refactor logging to use tracing crate and make it dynamic (#187) * feat: impl zks_getRawBlockTransactions (#185) * fix: unit-tests fixed on main (#193) * fix: fix forking for zksync-era@16.0.2 (#194) * fix: Release drafts now attach files correctly (#196) * feat: impl `zks_getAllAccountBalances` and `zks_getConfirmedTokens` (#198) * fix: Update transaction type for gas estimation if one is not provided for EIP712 transactions, this fixes paymasters for era-test-node. (#195) * chore: updates zksync dep, and replaces vm with multivm crate (#199) * chore: update era test node to latest * chore: cargo fmt * chore: switch toolchain actions and use nightly * chore: updates zks gas estimate * chore: remove +stable for nexttest action * chore: use larger runner * debug: collect runner stats * chore: invalidate cache to collect stats * chore: remove default runner for 16core * chore: fix workflows to use nightly (#203) * chore: fix workflows to use nightly * chore: fix workflows to use nightly * chore: refactor node namespaces (#197) * fix: validate gas_limit and max_fee_per_gas before transaction execution (#207) * fix: validate gas_limit and max_fee_per_gas before transaction execution * fix: add validation for max_fee_per_gas being to low * fix: move validate_tx to node/in_memoty.ts * fix: lint * fix: move tx validation logic to run_l2_tx * test: add tests for tx validation * fix: remove unneeded match from eth.rs * fix: lint * fix: remove +nightly from vscode debug config * fix: remove extra new line log * feat: add parent hash linking for blocks (#209) * feat: add parent_hash linking for blocks * test: add tests * fix: lint * fix: use correct genesis block hash as initial current_miniblock_hash * chore: Update zksync-era dependency to latest (#210) * chore: Update zksync-era dependency to latest * add Version17 to list of supported version * chore: add rust toolchain for version mgt, make inner_tx pub (#213) * chore: add rust toolchain for version mgt, update to make inner tx pub again * chore: change version to reflect ci * fix: rename run_l2_tx_inner, fix panics for lib users (#214) * rename run_l2_tx_inner, fix panics for lib users * add test * undo dep changes * cleanup comments * inline params * cleanup ExternalStorage * fix test messages * feat: get block returns null for non existing blocks (#218) * chore: fix docs issue (#215) * chore: fix rust-toolchain extension (#216) * run smoke test on PRs (#219) * feat: update `multivm::vm_virtual_blocks` dependency to `multivim::vm_latest` (#220) * bugfix: Set removed property in Logs to false (#224) * feat: Implement web3_clientVersion (#223) * feat: Implement web3_clientVersion * lint fix --------- Co-authored-by: Dustin Brickwood * feat: Update event formatter and observability formatter (#226) * chore: bump cargo toml for upcoming `0.1.0-alpha.12` release (#227) * chore: bump cargo toml for upcoming release * chore: bump cargo toml for upcoming release * feat(vm): Adapt code for the latest zksync era changes (#230) Signed-off-by: Danil * feat: Allow to pass custom tracers to run_raw_tx (#231) Signed-off-by: Danil * Merge main * latest vm * Small refactoring * System contracts 18.4.0 * EcAdd, EcMul, rebuild system contracts * Small change in system-contracts/VERSION.md * Update zksync-era dependency * Fix test * Prepare to merge into main --------- Signed-off-by: Danil Co-authored-by: Dustin Brickwood Co-authored-by: Nicolas Villanueva Co-authored-by: Nisheeth Barthwal Co-authored-by: George W <140627974+grw-ms@users.noreply.github.com> Co-authored-by: Roman Petriv Co-authored-by: Vasyl Ivanchuk Co-authored-by: Agustin Aon <21188659+aon@users.noreply.github.com> Co-authored-by: Danil --- .github/workflows/checks.yaml | 8 +- .github/workflows/docs.yaml | 8 + .github/workflows/release.yml | 11 +- .github/workflows/tests.yaml | 35 +- .vscode/launch.json | 2 +- Cargo.lock | 2882 +++++++++++------ Cargo.toml | 28 +- Makefile | 4 +- SUPPORTED_APIS.md | 217 +- e2e-tests/contracts/ERC20.sol | 33 + e2e-tests/contracts/ERC20FixedPaymaster.sol | 129 + e2e-tests/contracts/ERC721.sol | 33 + e2e-tests/contracts/ERC721GatedPaymaster.sol | 96 + e2e-tests/contracts/Greeter.sol | 9 +- e2e-tests/package.json | 1 + e2e-tests/test/erc20-fixed-paymaster.test.ts | 115 + e2e-tests/test/erc721-gated-paymaster.test.ts | 118 + e2e-tests/test/evm-apis.test.ts | 7 +- e2e-tests/test/main.test.ts | 3 +- e2e-tests/test/web3-apis.test.ts | 17 + e2e-tests/test/zks-apis.test.ts | 29 +- e2e-tests/yarn.lock | 5 + etc/system-contracts/SystemConfig.json | 4 +- etc/system-contracts/VERSION.md | 17 + .../bootloader/bootloader.yul | 600 ++-- .../bootloader/tests/README.md | 23 + .../tests/bootloader/bootloader_test.yul | 52 + .../bootloader/tests/utils/test_utils.yul | 55 + .../contracts/AccountCodeStorage.sol | 2 +- .../contracts/BootloaderUtilities.sol | 2 +- .../contracts/ComplexUpgrader.sol | 2 +- etc/system-contracts/contracts/Compressor.sol | 42 +- etc/system-contracts/contracts/Constants.sol | 16 +- .../contracts/ContractDeployer.sol | 32 +- .../contracts/DefaultAccount.sol | 6 +- .../contracts/EmptyContract.sol | 2 +- .../contracts/EventWriter.yul | 4 +- .../contracts/ImmutableSimulator.sol | 2 +- .../contracts/KnownCodesStorage.sol | 2 +- .../contracts/L1Messenger.sol | 26 +- etc/system-contracts/contracts/L2EthToken.sol | 2 +- .../contracts/MsgValueSimulator.sol | 2 +- .../contracts/NonceHolder.sol | 9 +- .../contracts/SystemContext.sol | 7 +- .../contracts/interfaces/IAccount.sol | 2 +- .../interfaces/IAccountCodeStorage.sol | 2 +- .../interfaces/IBootloaderUtilities.sol | 2 +- .../contracts/interfaces/IComplexUpgrader.sol | 2 +- .../contracts/interfaces/ICompressor.sol | 2 +- .../interfaces/IContractDeployer.sol | 2 +- .../contracts/interfaces/IEthToken.sol | 2 +- .../interfaces/IImmutableSimulator.sol | 2 +- .../interfaces/IKnownCodesStorage.sol | 2 +- .../contracts/interfaces/IL1Messenger.sol | 2 +- .../contracts/interfaces/IL2StandardToken.sol | 2 +- .../contracts/interfaces/IMailbox.sol | 2 +- .../contracts/interfaces/INonceHolder.sol | 2 +- .../contracts/interfaces/IPaymaster.sol | 2 +- .../contracts/interfaces/IPaymasterFlow.sol | 2 +- .../contracts/interfaces/ISystemContext.sol | 2 +- .../interfaces/ISystemContextDeprecated.sol | 2 +- .../contracts/interfaces/ISystemContract.sol | 2 +- .../contracts/libraries/EfficientCall.sol | 2 +- .../contracts/libraries/RLPEncoder.sol | 4 +- .../libraries/SystemContractHelper.sol | 33 +- .../libraries/SystemContractsCaller.sol | 2 +- .../contracts/libraries/TransactionHelper.sol | 2 +- .../libraries/UnsafeBytesCalldata.sol | 2 +- .../contracts/libraries/Utils.sol | 10 +- .../contracts/precompiles/EcAdd.yul | 6 +- .../contracts/precompiles/EcMul.yul | 6 +- .../contracts/precompiles/Ecrecover.yul | 4 +- .../contracts/precompiles/Keccak256.yul | 4 +- .../contracts/precompiles/SHA256.yul | 4 +- .../contracts/test-contracts/Callable.sol | 19 + .../test-contracts/DelegateCaller.sol | 20 + .../contracts/test-contracts/Deployable.sol | 19 + .../contracts/test-contracts/DummyUpgrade.sol | 2 +- .../test-contracts/EventWriterTest.sol | 31 + .../test-contracts/MockERC20Approve.sol | 16 + .../test-contracts/MockKnownCodesStorage.sol | 2 +- .../test-contracts/MockL1Messenger.sol | 16 + .../test-contracts/NotSystemCaller.sol | 30 + .../contracts/test-contracts/SystemCaller.sol | 25 + .../test-contracts/TestSystemContract.sol | 2 +- .../TestSystemContractHelper.sol | 2 +- etc/system-contracts/hardhat.config.ts | 57 +- etc/system-contracts/package.json | 42 +- .../scripts/calculate-hashes.ts | 230 ++ etc/system-contracts/scripts/compile-yul.ts | 52 +- etc/system-contracts/scripts/constants.ts | 273 +- .../scripts/deploy-preimages.ts | 305 ++ etc/system-contracts/scripts/process.ts | 264 +- etc/system-contracts/scripts/quick-setup.sh | 15 + etc/system-contracts/scripts/utils.ts | 88 +- etc/system-contracts/yarn.lock | 2615 ++++++++++++--- rust-toolchain.toml | 3 + scripts/refresh_contracts.sh | 2 +- src/bootloader_debug.rs | 30 +- src/cache.rs | 27 + src/configuration_api.rs | 231 -- src/deps/contracts/AccountCodeStorage.json | 4 +- src/deps/contracts/BootloaderUtilities.json | 4 +- src/deps/contracts/ComplexUpgrader.json | 4 +- src/deps/contracts/Compressor.json | 4 +- src/deps/contracts/ContractDeployer.json | 17 +- src/deps/contracts/DefaultAccount.json | 4 +- src/deps/contracts/EcAdd.yul.zbin | Bin 0 -> 6304 bytes src/deps/contracts/EcMul.yul.zbin | Bin 0 -> 9952 bytes src/deps/contracts/Ecrecover.yul.zbin | Bin 480 -> 544 bytes src/deps/contracts/EmptyContract.json | 4 +- src/deps/contracts/EventWriter.yul.zbin | Bin 736 -> 800 bytes src/deps/contracts/ImmutableSimulator.json | 4 +- src/deps/contracts/Keccak256.yul.zbin | Bin 928 -> 992 bytes src/deps/contracts/KnownCodesStorage.json | 4 +- src/deps/contracts/L1Messenger.json | 4 +- src/deps/contracts/L2EthToken.json | 4 +- src/deps/contracts/MsgValueSimulator.json | 4 +- src/deps/contracts/NonceHolder.json | 4 +- src/deps/contracts/SHA256.yul.zbin | Bin 672 -> 736 bytes src/deps/contracts/SystemContext.json | 4 +- src/deps/contracts/fee_estimate.yul.zbin | Bin 76896 -> 79136 bytes .../fee_estimate_impersonating.yul.zbin | Bin 76768 -> 78816 bytes src/deps/contracts/gas_test.yul.zbin | Bin 76000 -> 78112 bytes src/deps/contracts/playground_batch.yul.zbin | Bin 77216 -> 79456 bytes src/deps/contracts/proved_batch.yul.zbin | Bin 76896 -> 79008 bytes .../proved_batch_impersonating.yul.zbin | Bin 77664 -> 79520 bytes src/deps/mod.rs | 13 + src/deps/system_contracts.rs | 24 +- src/evm.rs | 675 ---- src/fork.rs | 36 +- src/formatter.rs | 50 +- src/hardhat.rs | 518 --- src/http_fork_source.rs | 92 +- src/lib.rs | 4 +- src/main.rs | 59 +- src/namespaces/config.rs | 93 + src/{ => namespaces}/debug.rs | 15 +- src/{ => namespaces}/eth_test.rs | 0 src/namespaces/evm.rs | 70 + src/namespaces/hardhat.rs | 89 + src/namespaces/mod.rs | 21 + src/namespaces/net.rs | 16 + src/namespaces/web3.rs | 9 + src/net.rs | 38 - src/node/config.rs | 189 ++ src/node/debug.rs | 564 ++++ src/{node.rs => node/eth.rs} | 2029 ++---------- src/node/evm.rs | 68 + src/node/hardhat.rs | 68 + src/node/in_memory.rs | 1834 +++++++++++ src/node/in_memory_ext.rs | 901 ++++++ src/node/mod.rs | 14 + src/node/net.rs | 23 + src/node/web3.rs | 13 + src/{ => node}/zks.rs | 415 ++- src/observability.rs | 30 +- src/system_contracts.rs | 30 +- src/testing.rs | 302 +- src/utils.rs | 33 +- test_endpoints.http | 33 + 161 files changed, 11796 insertions(+), 5873 deletions(-) create mode 100644 e2e-tests/contracts/ERC20.sol create mode 100644 e2e-tests/contracts/ERC20FixedPaymaster.sol create mode 100644 e2e-tests/contracts/ERC721.sol create mode 100644 e2e-tests/contracts/ERC721GatedPaymaster.sol create mode 100644 e2e-tests/test/erc20-fixed-paymaster.test.ts create mode 100644 e2e-tests/test/erc721-gated-paymaster.test.ts create mode 100644 e2e-tests/test/web3-apis.test.ts create mode 100644 etc/system-contracts/VERSION.md create mode 100644 etc/system-contracts/bootloader/tests/README.md create mode 100644 etc/system-contracts/bootloader/tests/bootloader/bootloader_test.yul create mode 100644 etc/system-contracts/bootloader/tests/utils/test_utils.yul create mode 100644 etc/system-contracts/contracts/test-contracts/Callable.sol create mode 100644 etc/system-contracts/contracts/test-contracts/DelegateCaller.sol create mode 100644 etc/system-contracts/contracts/test-contracts/Deployable.sol create mode 100644 etc/system-contracts/contracts/test-contracts/EventWriterTest.sol create mode 100644 etc/system-contracts/contracts/test-contracts/MockERC20Approve.sol create mode 100644 etc/system-contracts/contracts/test-contracts/MockL1Messenger.sol create mode 100644 etc/system-contracts/contracts/test-contracts/NotSystemCaller.sol create mode 100644 etc/system-contracts/contracts/test-contracts/SystemCaller.sol create mode 100644 etc/system-contracts/scripts/calculate-hashes.ts create mode 100644 etc/system-contracts/scripts/deploy-preimages.ts create mode 100755 etc/system-contracts/scripts/quick-setup.sh create mode 100644 rust-toolchain.toml delete mode 100644 src/configuration_api.rs create mode 100644 src/deps/contracts/EcAdd.yul.zbin create mode 100644 src/deps/contracts/EcMul.yul.zbin delete mode 100644 src/evm.rs delete mode 100644 src/hardhat.rs create mode 100644 src/namespaces/config.rs rename src/{ => namespaces}/debug.rs (97%) rename src/{ => namespaces}/eth_test.rs (100%) create mode 100644 src/namespaces/evm.rs create mode 100644 src/namespaces/hardhat.rs create mode 100644 src/namespaces/mod.rs create mode 100644 src/namespaces/net.rs create mode 100644 src/namespaces/web3.rs delete mode 100644 src/net.rs create mode 100644 src/node/config.rs create mode 100644 src/node/debug.rs rename src/{node.rs => node/eth.rs} (59%) create mode 100644 src/node/evm.rs create mode 100644 src/node/hardhat.rs create mode 100644 src/node/in_memory.rs create mode 100644 src/node/in_memory_ext.rs create mode 100644 src/node/mod.rs create mode 100644 src/node/net.rs create mode 100644 src/node/web3.rs rename src/{ => node}/zks.rs (72%) diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index 1c9c3125..f25074c6 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -6,7 +6,7 @@ on: tags: - 'v*' pull_request: - branches: [boojum-integration] + branches: [main] workflow_dispatch: jobs: @@ -16,10 +16,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Install rust + - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: nightly-2023-07-21 + toolchain: nightly-2023-07-23 components: rustfmt, clippy - uses: actions/setup-node@v3 @@ -44,7 +44,7 @@ jobs: - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: nightly-2023-07-21 + toolchain: nightly-2023-07-23 - name: Build Code run: make all diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index ff457b80..2a4eef9d 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -29,14 +29,22 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: nightly-2023-07-21 - name: Setup Pages uses: actions/configure-pages@v3 + - name: Install mdbook run: cargo install mdbook + - name: Generate rust docs run: | echo "Generating docs..." cargo doc --no-deps + - name: Make index.html run: echo ' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 769804eb..67154c52 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -44,13 +44,14 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v3 - - name: Set version of nightly Rust - run: rustup default nightly-2023-07-21 + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: nightly-2023-07-21 - name: Install target run: rustup target add ${{ matrix.arch }} - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: false + - name: Run cargo clean run: cargo clean diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 540d52f8..c4517290 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -2,18 +2,19 @@ name: run on: push: - branches: [boojum-integration] + branches: [main] tags: - 'v*' pull_request: - branches: [boojum-integration] + branches: [main] workflow_dispatch: + jobs: test: name: unit-tests strategy: matrix: - platform: [ubuntu-latest, macos-latest] + platform: [macos-latest, ubuntu-22.04-github-hosted-16core] runs-on: ${{ matrix.platform }} steps: @@ -30,3 +31,31 @@ jobs: - name: Run tests run: cargo nextest run + + smoke-test: + name: smoke-test + runs-on: ubuntu-22.04-github-hosted-16core + env: + TEST_REPO_DIR: test-repo + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + path: ${{ env.TEST_REPO_DIR }} + ref: ${{ github.event.pull_request.head.sha }} + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: nightly-2023-07-23 + + - name: Run smoke-test + env: + TEST_REPO: ${{ github.event.repository.name }} + TEST_REPO_DIR: "../${{ env.TEST_REPO_DIR }}" + RUST_BACKTRACE: full + run: | + git clone https://github.com/matter-labs/zkfoundry-smoke-test + cd zkfoundry-smoke-test + ./smoke-test.sh diff --git a/.vscode/launch.json b/.vscode/launch.json index 134bcd4a..e613f305 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -44,7 +44,7 @@ "ZKSYNC_HOME": "${workspaceFolder}" }, "args": [ - "--dev-use-local-contracts", + "--dev-system-contracts=local", "run" ], "preLaunchTask": "rebuild-contracts", diff --git a/Cargo.lock b/Cargo.lock index e9a9ed64..1b9627aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,13 +19,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617a8268e3537fe1d8c9ead925fca49ef6400927ee7bc26750e90ecee14ce4b8" dependencies = [ "bitflags 1.3.2", - "bytes 1.4.0", + "bytes 1.5.0", "futures-core", "futures-sink", "memchr", "pin-project-lite", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", ] @@ -46,19 +46,19 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.3.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74" +checksum = "a92ef85799cba03f76e4f7c10f533e66d87c9a7e7055f3391f09000ad8351bc9" dependencies = [ "actix-codec", "actix-rt", "actix-service", "actix-utils", - "ahash 0.8.3", - "base64 0.21.2", - "bitflags 1.3.2", + "ahash 0.8.6", + "base64 0.21.5", + "bitflags 2.4.1", "brotli", - "bytes 1.4.0", + "bytes 1.5.0", "bytestring", "derive_more", "encoding_rs", @@ -78,7 +78,7 @@ dependencies = [ "sha1", "smallvec", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", "zstd 0.12.4", ] @@ -90,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -108,9 +108,9 @@ dependencies = [ [[package]] name = "actix-rt" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" +checksum = "28f32d40287d3f402ae0028a9d54bef51af15c8769492826a69d28f81893151d" dependencies = [ "actix-macros", "futures-core", @@ -119,18 +119,17 @@ dependencies = [ [[package]] name = "actix-server" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327" +checksum = "3eb13e7eef0423ea6eab0e59f6c72e7cb46d33691ad56a726b3cd07ddec2c2d4" dependencies = [ "actix-rt", "actix-service", "actix-utils", "futures-core", "futures-util", - "mio 0.8.8", - "num_cpus", - "socket2 0.4.9", + "mio 0.8.9", + "socket2 0.5.5", "tokio", "tracing", ] @@ -158,9 +157,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.3.1" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96" +checksum = "0e4a5b5e29603ca8c94a77c65cf874718ceb60292c5a5c3e5f4ace041af462b9" dependencies = [ "actix-codec", "actix-http", @@ -171,8 +170,8 @@ dependencies = [ "actix-service", "actix-utils", "actix-web-codegen", - "ahash 0.7.6", - "bytes 1.4.0", + "ahash 0.8.6", + "bytes 1.5.0", "bytestring", "cfg-if 1.0.0", "cookie", @@ -180,7 +179,6 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "http", "itoa", "language-tags", "log", @@ -192,21 +190,21 @@ dependencies = [ "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.4.9", + "socket2 0.5.5", "time", "url", ] [[package]] name = "actix-web-codegen" -version = "4.2.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9" +checksum = "eb1f50ebbb30eca122b188319a4398b3f7bb4a8cdf50ecfb73bfc6a3c3ce54f5" dependencies = [ "actix-router", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 1.0.109", + "syn 2.0.39", ] [[package]] @@ -222,9 +220,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -235,6 +233,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array 0.14.7", +] + [[package]] name = "aes" version = "0.6.0" @@ -269,6 +277,20 @@ dependencies = [ "ctr 0.6.0", ] +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes 0.8.3", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash", + "subtle", +] + [[package]] name = "aes-soft" version = "0.6.4" @@ -291,32 +313,33 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.10", + "getrandom 0.2.11", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.4" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -362,30 +385,29 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -396,17 +418,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "anstyle-wincon" -version = "1.0.2" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -474,9 +496,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.1" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b74f44609f0f91493e3082d3734d98497e094777144380ea4db9f9905dd5b6" +checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5" dependencies = [ "brotli", "flate2", @@ -484,8 +506,8 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", - "zstd 0.12.4", - "zstd-safe 6.0.6", + "zstd 0.13.0", + "zstd-safe 7.0.0", ] [[package]] @@ -514,20 +536,20 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -536,7 +558,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "pharos", "rustc_version", ] @@ -568,7 +590,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -597,7 +619,7 @@ dependencies = [ "async-trait", "axum-core", "bitflags 1.3.2", - "bytes 1.4.0", + "bytes 1.5.0", "futures-util", "http", "http-body", @@ -626,7 +648,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ "async-trait", - "bytes 1.4.0", + "bytes 1.5.0", "futures-util", "http", "http-body", @@ -650,9 +672,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -683,9 +705,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -711,7 +733,7 @@ dependencies = [ [[package]] name = "bellman_ce" version = "0.3.2" -source = "git+https://github.com/matter-labs/bellman?branch=dev#bbac0559fdc440b2331eca1c347a30559a3dd969" +source = "git+https://github.com/matter-labs/bellman?branch=dev#5520aa2274afe73d281373c92b007a2ecdebfbea" dependencies = [ "arrayvec 0.7.4", "bit-vec", @@ -720,7 +742,7 @@ dependencies = [ "byteorder", "cfg-if 1.0.0", "crossbeam 0.7.3", - "futures 0.3.28", + "futures 0.3.29", "hex", "lazy_static", "num_cpus", @@ -734,7 +756,7 @@ dependencies = [ [[package]] name = "bellman_ce" version = "0.3.2" -source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#1f05c528c392ea9eadb99b22431659c113bc0af4" +source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#e01e5fa08a97a113e76ec8a69d06fe6cc2c82d17" dependencies = [ "arrayvec 0.7.4", "bit-vec", @@ -743,7 +765,7 @@ dependencies = [ "byteorder", "cfg-if 1.0.0", "crossbeam 0.7.3", - "futures 0.3.28", + "futures 0.3.29", "hex", "lazy_static", "num_cpus", @@ -788,12 +810,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "regex", "rustc-hash", "shlex", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -822,9 +844,18 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bitmaps" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] [[package]] name = "bitvec" @@ -870,6 +901,14 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes.git?rev=1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e#1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "blake2-rfc_bellman_edition" version = "0.0.1" @@ -884,7 +923,7 @@ dependencies = [ [[package]] name = "blake2s_const" version = "0.6.0" -source = "git+https://github.com/matter-labs/bellman?branch=dev#bbac0559fdc440b2331eca1c347a30559a3dd969" +source = "git+https://github.com/matter-labs/bellman?branch=dev#5520aa2274afe73d281373c92b007a2ecdebfbea" dependencies = [ "arrayref", "arrayvec 0.5.2", @@ -894,7 +933,7 @@ dependencies = [ [[package]] name = "blake2s_const" version = "0.6.0" -source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#1f05c528c392ea9eadb99b22431659c113bc0af4" +source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#e01e5fa08a97a113e76ec8a69d06fe6cc2c82d17" dependencies = [ "arrayref", "arrayvec 0.5.2", @@ -968,18 +1007,30 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +[[package]] +name = "blst" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + [[package]] name = "boojum" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#2771569baab9a59690d88cee6ba9b295c8a1e4c4" +source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#1588de7669b016df3f81f7139a1a4b131840e48b" dependencies = [ "arrayvec 0.7.4", "bincode", - "blake2 0.10.6", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "const_format", "convert_case 0.6.0", "crossbeam 0.8.2", - "crypto-bigint 0.5.3", + "crypto-bigint 0.5.5", "cs_derive 0.1.0 (git+https://github.com/matter-labs/era-boojum.git?branch=main)", "derivative", "ethereum-types 0.14.1", @@ -993,7 +1044,7 @@ dependencies = [ "rand 0.8.5", "rayon", "serde", - "sha2 0.10.6", + "sha2 0.10.8", "sha3 0.10.6", "smallvec", "unroll", @@ -1001,9 +1052,9 @@ dependencies = [ [[package]] name = "brotli" -version = "3.3.4" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1012,9 +1063,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1026,7 +1077,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ - "sha2 0.10.6", + "sha2 0.10.8", "tinyvec", ] @@ -1043,9 +1094,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.6.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" dependencies = [ "memchr", "serde", @@ -1053,9 +1104,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -1071,15 +1122,15 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytecount" -version = "0.6.3" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -1093,20 +1144,20 @@ dependencies = [ [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] [[package]] name = "bytestring" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae" +checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", ] [[package]] @@ -1141,9 +1192,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" dependencies = [ "serde", ] @@ -1163,9 +1214,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", @@ -1206,6 +1257,30 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if 1.0.0", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher 0.4.4", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.31" @@ -1218,7 +1293,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -1238,17 +1313,17 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] name = "circuit_definitions" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#3cd647aa57fc2e1180bab53f7a3b61ec47502a46" +source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#d2e3670e0c5115b7cc7cc24e6d3dbdd17a214aad" dependencies = [ "crossbeam 0.8.2", "derivative", - "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper)", - "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2)", + "seq-macro", "serde", "snark_wrapper", "zk_evm 1.4.0", @@ -1291,20 +1366,19 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.23" +version = "4.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03aef18ddf7d879c15ce20f04826ef8418101c7e528014c3eeea13321047dca3" +checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.23" +version = "4.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ce6fffb678c9b80a70b6b6de0aad31df727623a70fd9a842c30cd573e2fa98" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" dependencies = [ "anstream", "anstyle", @@ -1314,21 +1388,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.12" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "cloudabi" @@ -1342,7 +1416,7 @@ dependencies = [ [[package]] name = "codegen" version = "0.1.0" -source = "git+https://github.com/matter-labs/solidity_plonk_verifier.git?branch=dev#07954802c13fb087efb5874c2ce521f843d614fd" +source = "git+https://github.com/matter-labs/solidity_plonk_verifier.git?branch=dev#82f96b7156551087f1c9bfe4f0ea68845b6debfc" dependencies = [ "ethereum-types 0.14.1", "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=dev)", @@ -1374,9 +1448,9 @@ dependencies = [ "coins-core", "digest 0.10.7", "hmac 0.12.1", - "k256 0.13.1", + "k256 0.13.2", "serde", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", ] @@ -1392,7 +1466,7 @@ dependencies = [ "once_cell", "pbkdf2 0.12.2", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", ] @@ -1402,7 +1476,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "bech32", "bs58", "digest 0.10.7", @@ -1411,8 +1485,8 @@ dependencies = [ "ripemd", "serde", "serde_derive", - "sha2 0.10.6", - "sha3 0.10.6", + "sha2 0.10.8", + "sha3 0.10.8", "thiserror", ] @@ -1430,7 +1504,7 @@ checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" dependencies = [ "is-terminal", "lazy_static", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1439,19 +1513,20 @@ version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "memchr", ] [[package]] name = "const-hex" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c37be52ef5e3b394db27a2341010685ad5103c72ac15ce2e9420a7e8f93f342c" +checksum = "a5104de16b218eddf8e34ffe2f86f74bfa4e61e95a1b89732fccf6325efd0557" dependencies = [ "cfg-if 1.0.0", "cpufeatures", "hex", + "proptest", "serde", ] @@ -1469,20 +1544,20 @@ checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "const_format" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "unicode-xid 0.2.4", ] @@ -1537,9 +1612,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1737,9 +1812,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", @@ -1754,6 +1829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array 0.14.7", + "rand_core 0.6.4", "typenum", ] @@ -1780,10 +1856,10 @@ dependencies = [ [[package]] name = "cs_derive" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#2771569baab9a59690d88cee6ba9b295c8a1e4c4" +source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#1588de7669b016df3f81f7139a1a4b131840e48b" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -1791,10 +1867,10 @@ dependencies = [ [[package]] name = "cs_derive" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#e819d15b107a06a746299f98bbd9802e26eeb348" +source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#ed8ab8984cae05d00d9d62196753c8d40df47c7d" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde", "syn 1.0.109", @@ -1820,12 +1896,40 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e" +checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf" dependencies = [ "nix", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", ] [[package]] @@ -1846,7 +1950,7 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "strsim 0.10.0", "syn 1.0.109", @@ -1865,22 +1969,22 @@ dependencies = [ [[package]] name = "dashmap" -version = "5.5.1" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd72493923899c6f10c641bdbdeddc7183d6396641d99c1a0d1597f37f92e28" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.14.2", + "hashbrown 0.14.3", "lock_api", "once_cell", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "debugid" @@ -1889,7 +1993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ "serde", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -1925,10 +2029,11 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" dependencies = [ + "powerfmt", "serde", ] @@ -1938,7 +2043,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -1950,12 +2055,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "rustc_version", "syn 1.0.109", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "digest" version = "0.8.1" @@ -2034,7 +2145,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2080,16 +2191,41 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der 0.7.8", "digest 0.10.7", - "elliptic-curve 0.13.6", + "elliptic-curve 0.13.8", "rfc6979 0.4.0", - "signature 2.1.0", - "spki 0.7.2", + "signature 2.2.0", + "spki 0.7.3", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8 0.10.2", + "signature 2.2.0", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.8", + "subtle", + "zeroize", ] [[package]] @@ -2123,12 +2259,12 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.6" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct 0.2.0", - "crypto-bigint 0.5.3", + "crypto-bigint 0.5.5", "digest 0.10.7", "ff 0.13.0", "generic-array 0.14.7", @@ -2160,9 +2296,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if 1.0.0", ] @@ -2173,15 +2309,15 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe81b5c06ecfdbc71dd845216f225f53b62a10cb8a16c946836a3467f701d05b" dependencies = [ - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "hex", - "k256 0.13.1", + "k256 0.13.2", "log", "rand 0.8.5", "rlp", "serde", - "sha3 0.10.6", + "sha3 0.10.8", "zeroize", ] @@ -2200,9 +2336,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" dependencies = [ "humantime", "is-terminal", @@ -2228,20 +2364,20 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "era_test_node" -version = "0.1.0-alpha.5" +version = "0.1.0-alpha.12" dependencies = [ "anyhow", "bigdecimal", "chrono", - "clap 4.3.23", + "clap 4.4.10", "colored", "ethabi 16.0.0", "ethers", "eyre", - "futures 0.3.28", + "futures 0.3.29", "hex", "httptest", - "indexmap 2.0.2", + "indexmap 2.1.0", "itertools 0.10.5", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-core-client", @@ -2249,17 +2385,19 @@ dependencies = [ "jsonrpc-http-server", "lazy_static", "maplit", + "multivm", "once_cell", "openssl-sys", "reqwest", "rustc-hash", "serde", "serde_json", + "sha3 0.10.8", "tempdir", + "time", "tokio", "tracing", "tracing-subscriber", - "vm", "zksync-web3-rs", "zksync_basic_types", "zksync_contracts", @@ -2272,23 +2410,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -2316,8 +2443,8 @@ dependencies = [ "scrypt 0.10.0", "serde", "serde_json", - "sha2 0.10.6", - "sha3 0.10.6", + "sha2 0.10.8", + "sha3 0.10.8", "thiserror", "uuid 0.8.2", ] @@ -2349,7 +2476,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha3 0.10.6", + "sha3 0.10.8", "thiserror", "uint", ] @@ -2407,16 +2534,16 @@ dependencies = [ "impl-codec 0.6.0", "impl-rlp", "impl-serde 0.4.0", - "primitive-types 0.12.1", + "primitive-types 0.12.2", "scale-info", "uint", ] [[package]] name = "ethers" -version = "2.0.8" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b4026b97da8281276744741fac7eb385da905f6093c583331fa2953fdd4253" +checksum = "1a5344eea9b20effb5efeaad29418215c4d27017639fd1f908260f59cbbd226e" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -2430,9 +2557,9 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e9e8acd0ed348403cc73a670c24daba3226c40b98dc1a41903766b3ab6240a" +checksum = "8c405f24ea3a517899ba7985385c43dc4a7eb1209af3b1e0a1a32d7dcc7f8d09" dependencies = [ "ethers-core", "once_cell", @@ -2442,9 +2569,9 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" +checksum = "0111ead599d17a7bff6985fd5756f39ca7033edc79a31b23026a8d5d64fa95cd" dependencies = [ "const-hex", "ethers-contract-abigen", @@ -2461,9 +2588,9 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce95a43c939b2e4e2f3191c5ad4a1f279780b8a39139c9905b43a7433531e2ab" +checksum = "51258120c6b47ea9d9bec0d90f9e8af71c977fbefbef8213c91bfed385fe45eb" dependencies = [ "Inflector", "const-hex", @@ -2472,49 +2599,49 @@ dependencies = [ "ethers-etherscan", "eyre", "prettyplease", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "regex", "reqwest", "serde", "serde_json", - "syn 2.0.29", - "toml 0.7.8", + "syn 2.0.39", + "toml 0.8.8", "walkdir", ] [[package]] name = "ethers-contract-derive" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9ce44906fc871b3ee8c69a695ca7ec7f70e50cb379c9b9cb5e532269e492f6" +checksum = "936e7a0f1197cee2b62dc89f63eff3201dbf87c283ff7e18d86d38f83b845483" dependencies = [ "Inflector", "const-hex", "ethers-contract-abigen", "ethers-core", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde_json", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "ethers-core" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" +checksum = "2f03e0bdc216eeb9e355b90cf610ef6c5bb8aca631f97b5ae9980ce34ea7878d" dependencies = [ "arrayvec 0.7.4", - "bytes 1.4.0", - "cargo_metadata 0.17.0", + "bytes 1.5.0", + "cargo_metadata 0.18.1", "chrono", "const-hex", - "elliptic-curve 0.13.6", + "elliptic-curve 0.13.8", "ethabi 18.0.0", "generic-array 0.14.7", - "k256 0.13.1", - "num_enum 0.7.0", + "k256 0.13.2", + "num_enum 0.7.1", "once_cell", "open-fastrlp", "rand 0.8.5", @@ -2522,7 +2649,7 @@ dependencies = [ "serde", "serde_json", "strum 0.25.0", - "syn 2.0.29", + "syn 2.0.39", "tempfile", "thiserror", "tiny-keccak 2.0.2", @@ -2531,10 +2658,11 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e53451ea4a8128fbce33966da71132cf9e1040dcfd2a2084fd7733ada7b2045" +checksum = "abbac2c890bdbe0f1b8e549a53b00e2c4c1de86bb077c1094d1f38cdf9381a56" dependencies = [ + "chrono", "ethers-core", "reqwest", "semver", @@ -2546,9 +2674,9 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.8" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c339aad74ae5c451d27e0e49c7a3c7d22620b119b4f9291d7aa21f72d7f366" +checksum = "681ece6eb1d10f7cf4f873059a77c04ff1de4f35c63dd7bccde8f438374fcb93" dependencies = [ "async-trait", "auto_impl", @@ -2573,14 +2701,14 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" +checksum = "25d6c0c9455d93d4990c06e049abf9b30daf148cf461ee939c11d88907c60816" dependencies = [ "async-trait", "auto_impl", - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "const-hex", "enr", "ethers-core", @@ -2610,28 +2738,28 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.8" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4864d387456a9c09a1157fa10e1528b29d90f1d859443acf06a1b23365fb518c" +checksum = "0cb1b714e227bbd2d8c53528adb580b203009728b17d0d0e4119353aa9bc5532" dependencies = [ "async-trait", "coins-bip32", "coins-bip39", - "elliptic-curve 0.13.6", + "const-hex", + "elliptic-curve 0.13.8", "eth-keystore", "ethers-core", - "hex", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "tracing", ] [[package]] name = "ethers-solc" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de34e484e7ae3cab99fbfd013d6c5dc7f9013676a4e0e414d8b12e1213e8b3ba" +checksum = "a64f710586d147864cff66540a6d64518b9ff37d73ef827fee430538265b595f" dependencies = [ "cfg-if 1.0.0", "const-hex", @@ -2667,9 +2795,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "80f656be11ddf91bd709454d15d5bd896fbaf4cc3314e69349e4d1569f5b46cd" dependencies = [ "indenter", "once_cell", @@ -2692,9 +2820,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "ff" @@ -2735,15 +2863,21 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b96fbccd88dbb1fac4ee4a07c2fcc4ca719a74ffbd9d2b9d41d8c8eb073d8b20" dependencies = [ - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde", "syn 1.0.109", ] +[[package]] +name = "fiat-crypto" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" + [[package]] name = "findshlibs" version = "0.10.2" @@ -2756,6 +2890,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + [[package]] name = "firestorm" version = "0.5.1" @@ -2794,9 +2934,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -2825,9 +2965,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -2835,7 +2975,7 @@ dependencies = [ [[package]] name = "franklin-crypto" version = "0.0.5" -source = "git+https://github.com/matter-labs/franklin-crypto?branch=dev#a5e55f5fc6e718e8ab2e727ce21c0fa599eaf79b" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=dev#5695d07c7bc604c2c39a27712ffac171d39ee1ed" dependencies = [ "arr_macro", "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=dev)", @@ -2849,7 +2989,7 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "lazy_static", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-derive 0.2.5", "num-integer", "num-traits", @@ -2865,7 +3005,7 @@ dependencies = [ [[package]] name = "franklin-crypto" version = "0.0.5" -source = "git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper#b1f1677d9ece6a6ddcfbf394dc2db2bd8b792e6c" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper#a9e29acd73245bd3b670b62b4d481ece06d43803" dependencies = [ "arr_macro", "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=snark-wrapper)", @@ -2881,7 +3021,7 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "lazy_static", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-derive 0.2.5", "num-integer", "num-traits", @@ -2946,9 +3086,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -2961,9 +3101,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -2971,15 +3111,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -3000,9 +3140,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-locks" @@ -3016,26 +3156,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-timer" @@ -3049,9 +3189,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures 0.1.31", "futures-channel", @@ -3108,20 +3248,30 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if 1.0.0", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] +[[package]] +name = "ghash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +dependencies = [ + "opaque-debug 0.3.0", + "polyval", +] + [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -3131,15 +3281,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", - "bstr 1.6.2", - "fnv", + "bstr 1.8.0", "log", - "regex", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -3195,7 +3345,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f40175857d0b8d7b6cad6cd9594284da5041387fa2ddff30ab6d8faef65eb" dependencies = [ "async-trait", - "base64 0.21.2", + "base64 0.21.5", "google-cloud-metadata", "google-cloud-token", "home", @@ -3228,8 +3378,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "215abab97e07d144428425509c1dad07e57ea72b84b21bcdb6a8a5f12a5c4932" dependencies = [ "async-stream", - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "futures-util", "google-cloud-auth", "google-cloud-metadata", @@ -3239,11 +3389,11 @@ dependencies = [ "percent-encoding", "regex", "reqwest", - "ring", + "ring 0.16.20", "rsa", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "time", "tokio", @@ -3253,9 +3403,9 @@ dependencies = [ [[package]] name = "google-cloud-token" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcd62eb34e3de2f085bcc33a09c3e17c4f65650f36d53eb328b00d63bcb536a" +checksum = "8f49c12ba8b21d128a2ce8585955246977fbce4415f680ebf9199b6f9d6d725f" dependencies = [ "async-trait", ] @@ -3267,7 +3417,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19775995ee20209163239355bc3ad2f33f83da35d9ef72dea26e5af753552c87" dependencies = [ "dashmap", - "futures 0.3.28", + "futures 0.3.29", "futures-timer", "no-std-compat", "nonzero_ext", @@ -3301,28 +3451,28 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "fnv", "futures-core", "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", ] [[package]] name = "handlebars" -version = "4.3.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -3338,7 +3488,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", ] [[package]] @@ -3353,14 +3503,14 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.6", ] [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "hashers" @@ -3382,9 +3532,9 @@ dependencies = [ [[package]] name = "hdrhistogram" -version = "7.5.2" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ "byteorder", "num-traits", @@ -3392,13 +3542,12 @@ dependencies = [ [[package]] name = "headers" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "headers-core", "http", "httpdate", @@ -3444,9 +3593,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -3488,7 +3637,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -3504,11 +3653,11 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "fnv", "itoa", ] @@ -3519,7 +3668,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "http", "pin-project-lite", ] @@ -3544,15 +3693,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "httptest" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f25cfb6def593d43fae1ead24861f217e93bc70768a45cc149a69b5f049df4" +checksum = "c8b44a11846bda8c9fe9194f9924db7132c34635c7ce020f180f6c5d46d2308f" dependencies = [ "bstr 0.2.17", - "bytes 1.4.0", + "bytes 1.5.0", "crossbeam-channel 0.5.8", "form_urlencoded", - "futures 0.3.28", + "futures 0.3.29", "http", "hyper", "log", @@ -3576,7 +3725,7 @@ version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-channel", "futures-core", "futures-util", @@ -3587,7 +3736,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -3596,9 +3745,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -3616,7 +3765,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "hyper", "native-tls", "tokio", @@ -3625,16 +3774,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -3662,6 +3811,30 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check", +] + [[package]] name = "impl-codec" version = "0.5.1" @@ -3677,7 +3850,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.6.4", + "parity-scale-codec 3.6.9", ] [[package]] @@ -3713,7 +3886,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -3736,12 +3909,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown 0.14.3", ] [[package]] @@ -3773,9 +3946,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "ipnetwork" @@ -3799,9 +3972,9 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -3830,18 +4003,18 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -3852,7 +4025,7 @@ version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ "derive_more", - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-pubsub", "log", @@ -3866,7 +4039,7 @@ version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "futures-executor", "futures-util", "log", @@ -3880,7 +4053,7 @@ name = "jsonrpc-core" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "futures-executor", "futures-util", "log", @@ -3894,7 +4067,7 @@ name = "jsonrpc-core-client" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-client-transports", ] @@ -3904,7 +4077,7 @@ version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ "proc-macro-crate 0.1.5", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -3914,7 +4087,7 @@ name = "jsonrpc-http-server" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "hyper", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-server-utils", @@ -3929,7 +4102,7 @@ name = "jsonrpc-pubsub" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "lazy_static", "log", @@ -3943,8 +4116,8 @@ name = "jsonrpc-server-utils" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "bytes 1.4.0", - "futures 0.3.28", + "bytes 1.5.0", + "futures 0.3.29", "globset", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "lazy_static", @@ -3960,7 +4133,7 @@ name = "jsonrpc-ws-server" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-server-utils", "log", @@ -4003,7 +4176,7 @@ dependencies = [ "thiserror", "tokio", "tokio-rustls", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", "webpki-roots 0.24.0", ] @@ -4063,7 +4236,7 @@ checksum = "21dc12b1d4f16a86e8c522823c4fab219c88c03eb7c924ec0501a64bf12e058b" dependencies = [ "heck 0.4.1", "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -4083,7 +4256,7 @@ dependencies = [ "soketto", "tokio", "tokio-stream", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower", "tracing", ] @@ -4131,9 +4304,9 @@ version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "pem", - "ring", + "ring 0.16.20", "serde", "serde_json", "simple_asn1", @@ -4148,21 +4321,21 @@ dependencies = [ "cfg-if 1.0.0", "ecdsa 0.14.8", "elliptic-curve 0.12.3", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "k256" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" dependencies = [ "cfg-if 1.0.0", - "ecdsa 0.16.8", - "elliptic-curve 0.13.6", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", "once_cell", - "sha2 0.10.6", - "signature 2.1.0", + "sha2 0.10.8", + "signature 2.2.0", ] [[package]] @@ -4186,18 +4359,20 @@ dependencies = [ [[package]] name = "lalrpop" -version = "0.20.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83be602e051ada38d90c7841092adabeb585197afe9dabb20e4f8375cc87846e" +checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" dependencies = [ "ascii-canvas", "bit-set", + "diff", "ena", - "itertools 0.11.0", + "is-terminal", + "itertools 0.10.5", "lalrpop-util", "petgraph", "regex", - "regex-syntax 0.7.4", + "regex-syntax 0.7.5", "string_cache", "term", "tiny-keccak 2.0.2", @@ -4206,9 +4381,9 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.20.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365d88f9d803538a06641e6736f21d95ecf9226dc1693421212e62c405cdd199" +checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" [[package]] name = "language-tags" @@ -4222,7 +4397,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -4239,9 +4414,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libloading" @@ -4255,9 +4430,20 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "librocksdb-sys" @@ -4286,53 +4472,52 @@ dependencies = [ [[package]] name = "linkme" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f948366ad5bb46b5514ba7a7a80643726eef08b06632592699676748c8bc33b" +checksum = "91ed2ee9464ff9707af8e9ad834cffa4802f072caad90639c583dd3c62e6e608" dependencies = [ "linkme-impl", ] [[package]] name = "linkme-impl" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc28438cad73dcc90ff3466fc329a9252b1b8ba668eb0d5668ba97088cf4eef0" +checksum = "ba125974b109d512fccbc6c0244e7580143e460895dfd6ea7f8bbb692fd94396" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "local-channel" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" dependencies = [ "futures-core", "futures-sink", - "futures-util", "local-waker", ] [[package]] name = "local-waker" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg 1.1.0", "scopeguard", @@ -4344,6 +4529,38 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "logos" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c000ca4d908ff18ac99b93a062cb8958d331c3220719c52e77cb19cc6ac5d2c1" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" +dependencies = [ + "beef", + "fnv", + "proc-macro2 1.0.70", + "quote 1.0.33", + "regex-syntax 0.6.29", + "syn 2.0.39", +] + +[[package]] +name = "logos-derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfc0d229f1f42d790440136d941afd806bc9e949e2bcb8faa813b0f00d1267e" +dependencies = [ + "logos-codegen", +] + [[package]] name = "mach" version = "0.3.2" @@ -4385,9 +4602,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "maybe-uninit" @@ -4397,18 +4614,19 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if 1.0.0", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.6.3" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" @@ -4434,7 +4652,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.6", "metrics-macros", "portable-atomic", ] @@ -4445,7 +4663,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a4964177ddfdab1e3a2b37aec7cf320e14169abb0ed73999f558136409178d5" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "hyper", "indexmap 1.9.3", "ipnet", @@ -4463,9 +4681,9 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddece26afd34c31585c74a4db0630c376df271c285d682d1e55012197830b6df" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -4483,6 +4701,29 @@ dependencies = [ "sketches-ddsketch", ] +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] + [[package]] name = "mime" version = "0.3.17" @@ -4550,14 +4791,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -4584,19 +4825,30 @@ dependencies = [ "ws2_32-sys", ] +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + [[package]] name = "multivm" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ - "vlog", - "vm", - "vm_1_3_2", - "vm_m5", - "vm_m6", - "vm_virtual_blocks", + "anyhow", + "hex", + "itertools 0.10.5", + "once_cell", + "thiserror", + "tracing", + "vise", + "zk_evm 1.3.1", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2)", + "zk_evm 1.4.0", "zksync_contracts", "zksync_state", + "zksync_system_constants", "zksync_types", "zksync_utils", ] @@ -4638,14 +4890,13 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nix" -version = "0.26.2" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if 1.0.0", "libc", - "static_assertions", ] [[package]] @@ -4706,7 +4957,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-complex 0.4.4", "num-integer", "num-iter", @@ -4728,9 +4979,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg 1.1.0", "num-integer", @@ -4791,7 +5042,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -4847,16 +5098,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg 1.1.0", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg 1.1.0", "libm", @@ -4868,7 +5119,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", ] @@ -4883,11 +5134,11 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" +checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0" dependencies = [ - "num_enum_derive 0.7.0", + "num_enum_derive 0.7.1", ] [[package]] @@ -4897,28 +5148,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "num_enum_derive" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" +checksum = "6c11e44798ad209ccdd91fc192f0526a369a01234f7373e1b141c96d7cee4f0e" dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro-crate 2.0.0", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", ] [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -4949,7 +5209,7 @@ checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ "arrayvec 0.7.4", "auto_impl", - "bytes 1.4.0", + "bytes 1.5.0", "ethereum-types 0.14.1", "open-fastrlp-derive", ] @@ -4960,19 +5220,19 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ - "bytes 1.4.0", - "proc-macro2 1.0.66", + "bytes 1.5.0", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] [[package]] name = "openssl" -version = "0.10.56" +version = "0.10.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e" +checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if 1.0.0", "foreign-types", "libc", @@ -4987,9 +5247,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -5000,18 +5260,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.27.0+1.1.1v" +version = "300.1.6+3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e8f197c82d7511c5b014030c9b1efeda40d7d5f99d23b4ceed3524a5e63f02" +checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.91" +version = "0.9.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac" +checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" dependencies = [ "cc", "libc", @@ -5026,6 +5286,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + [[package]] name = "os_info" version = "3.7.0" @@ -5069,7 +5338,19 @@ dependencies = [ [[package]] name = "pairing_ce" version = "0.28.5" -source = "git+https://github.com/matter-labs/pairing.git#d06c2a112913b0abfb75996cc29a6b6075717e99" +source = "git+https://github.com/matter-labs/pairing.git?rev=f55393f#f55393fd366596eac792d78525d26e9c4d6ed1ca" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "pairing_ce" +version = "0.28.5" +source = "git+https://github.com/matter-labs/pairing.git#f55393fd366596eac792d78525d26e9c4d6ed1ca" dependencies = [ "byteorder", "cfg-if 1.0.0", @@ -5118,15 +5399,15 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8e946cc0cc711189c0b0249fb8b599cbeeab9784d83c415719368bb8d4ac64" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec 0.7.4", "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.6.4", + "parity-scale-codec-derive 3.6.9", "serde", ] @@ -5137,19 +5418,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a296c3079b5fefbc499e1de58dc26c09b1b9a5952d26694ee89f04a43ebbb3e" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro-crate 2.0.0", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -5190,7 +5471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] @@ -5209,15 +5490,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -5284,7 +5565,7 @@ dependencies = [ "digest 0.10.7", "hmac 0.12.1", "password-hash 0.4.2", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] @@ -5323,25 +5604,26 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853" +checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" dependencies = [ "pest", "pest_generator", @@ -5349,26 +5631,26 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929" +checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "pest_meta" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48" +checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" dependencies = [ "once_cell", "pest", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] @@ -5378,7 +5660,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.2", + "indexmap 2.1.0", ] [[package]] @@ -5387,7 +5669,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "rustc_version", ] @@ -5419,9 +5701,9 @@ checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared 0.11.2", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -5457,16 +5739,16 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "pin-project-lite" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -5513,7 +5795,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der 0.7.8", - "spki 0.7.2", + "spki 0.7.3", ] [[package]] @@ -5522,11 +5804,46 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "platforms" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + [[package]] name = "portable-atomic" -version = "1.4.2" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b" + +[[package]] +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f32154ba0af3a075eefa1eda8bb414ee928f62303a54ea85b8d6638ff1a6ee9e" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" @@ -5542,12 +5859,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ - "proc-macro2 1.0.66", - "syn 2.0.29", + "proc-macro2 1.0.70", + "syn 2.0.39", ] [[package]] @@ -5565,9 +5882,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec 0.6.0", @@ -5596,6 +5913,15 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -5603,7 +5929,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", "version_check", @@ -5615,7 +5941,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "version_check", ] @@ -5637,9 +5963,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] @@ -5662,23 +5988,137 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "prometheus_exporter" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "metrics", "metrics-exporter-prometheus", "tokio", + "vise", "vise-exporter", ] +[[package]] +name = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bitflags 2.4.1", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift 0.3.0", + "regex-syntax 0.8.2", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes 1.5.0", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +dependencies = [ + "bytes 1.5.0", + "heck 0.4.1", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.39", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] + +[[package]] +name = "prost-reflect" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057237efdb71cf4b3f9396302a3d6599a92fa94063ba537b66130980ea9909f3" +dependencies = [ + "base64 0.21.5", + "logos", + "miette", + "once_cell", + "prost", + "prost-types", + "serde", + "serde-value", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + +[[package]] +name = "protox" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00bb76c5f6221de491fe2c8f39b106330bbd9762c6511119c07940e10eb9ff11" +dependencies = [ + "bytes 1.5.0", + "miette", + "prost", + "prost-reflect", + "prost-types", + "protox-parse", + "thiserror", +] + +[[package]] +name = "protox-parse" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4581f441c58863525a3e6bec7b8de98188cf75239a56c725a3e7288450a33f" +dependencies = [ + "logos", + "miette", + "prost-types", + "thiserror", +] + [[package]] name = "pulldown-cmark" version = "0.9.3" @@ -5722,6 +6162,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + [[package]] name = "quote" version = "0.6.13" @@ -5737,7 +6186,7 @@ version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", ] [[package]] @@ -5780,7 +6229,7 @@ dependencies = [ "rand_jitter", "rand_os", "rand_pcg", - "rand_xorshift", + "rand_xorshift 0.1.1", "winapi 0.3.9", ] @@ -5868,7 +6317,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", ] [[package]] @@ -5942,6 +6391,24 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + [[package]] name = "raw-cpuid" version = "10.7.0" @@ -5953,9 +6420,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -5963,14 +6430,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ - "crossbeam-channel 0.5.8", "crossbeam-deque 0.8.3", "crossbeam-utils 0.8.16", - "num_cpus", ] [[package]] @@ -5993,34 +6458,34 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", + "getrandom 0.2.11", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.9.3" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.6", - "regex-syntax 0.7.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -6034,13 +6499,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.6" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] @@ -6051,9 +6516,15 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "remove_dir_all" @@ -6066,12 +6537,12 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.19" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b9b67e2ca7dd9e9f9285b759de30ff538aab981abaaf7bc9bd90b84a0126c3" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "encoding_rs", "futures-core", "futures-util", @@ -6095,29 +6566,29 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tokio-rustls", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.25.2", + "webpki-roots 0.25.3", "winreg", ] [[package]] name = "rescue_poseidon" version = "0.4.1" -source = "git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2#09b96e7e82dadac151d8d681f017cb6a16961801" +source = "git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2#c4a788471710bdb7aa0f59e8756b45ef93cdd2b2" dependencies = [ "addchain", "arrayvec 0.7.4", - "blake2 0.10.6", - "boojum", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder", "derivative", "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper)", @@ -6135,11 +6606,11 @@ dependencies = [ [[package]] name = "rescue_poseidon" version = "0.4.1" -source = "git+https://github.com/matter-labs/rescue-poseidon#f611a3353e48cf42153e44d89ed90da9bc5934e8" +source = "git+https://github.com/matter-labs/rescue-poseidon#d059b5042df5ed80e151f05751410b524a54d16c" dependencies = [ "addchain", "arrayvec 0.7.4", - "blake2 0.10.6", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder", "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=dev)", "num-bigint 0.3.3", @@ -6182,12 +6653,26 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi 0.3.9", ] +[[package]] +name = "ring" +version = "0.17.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866" +dependencies = [ + "cc", + "getrandom 0.2.11", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -6214,7 +6699,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "rlp-derive", "rustc-hex", ] @@ -6225,7 +6710,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -6289,25 +6774,25 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.8" +version = "0.38.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f" +checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.21.6" +version = "0.21.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", - "ring", + "ring 0.17.6", "rustls-webpki", "sct", ] @@ -6326,21 +6811,21 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", ] [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.6", + "untrusted 0.9.0", ] [[package]] @@ -6390,7 +6875,7 @@ checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ "cfg-if 1.0.0", "derive_more", - "parity-scale-codec 3.6.4", + "parity-scale-codec 3.6.9", "scale-info-derive", ] @@ -6401,7 +6886,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -6412,7 +6897,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -6446,17 +6931,17 @@ dependencies = [ "hmac 0.12.1", "pbkdf2 0.11.0", "salsa20 0.10.2", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.6", + "untrusted 0.9.0", ] [[package]] @@ -6549,9 +7034,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" dependencies = [ "serde", ] @@ -6570,9 +7055,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "sentry" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b0ad16faa5d12372f914ed40d00bda21a6d1bdcc99264c5e5e1c9495cf3654" +checksum = "6ce4b57f1b521f674df7a1d200be8ff5d74e3712020ee25b553146657b5377d5" dependencies = [ "httpdate", "native-tls", @@ -6589,9 +7074,9 @@ dependencies = [ [[package]] name = "sentry-backtrace" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f2ee8f147bb5f22ac59b5c35754a759b9a6f6722402e2a14750b2a63fc59bd" +checksum = "58cc8d4e04a73de8f718dc703943666d03f25d3e9e4d0fb271ca0b8c76dfa00e" dependencies = [ "backtrace", "once_cell", @@ -6601,9 +7086,9 @@ dependencies = [ [[package]] name = "sentry-contexts" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcd133362c745151eeba0ac61e3ba8350f034e9fe7509877d08059fe1d7720c6" +checksum = "6436c1bad22cdeb02179ea8ef116ffc217797c028927def303bc593d9320c0d1" dependencies = [ "hostname", "libc", @@ -6615,9 +7100,9 @@ dependencies = [ [[package]] name = "sentry-core" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7163491708804a74446642ff2c80b3acd668d4b9e9f497f85621f3d250fd012b" +checksum = "901f761681f97db3db836ef9e094acdd8756c40215326c194201941947164ef1" dependencies = [ "once_cell", "rand 0.8.5", @@ -6628,9 +7113,9 @@ dependencies = [ [[package]] name = "sentry-debug-images" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5003d7ff08aa3b2b76994080b183e8cfa06c083e280737c9cee02ca1c70f5e" +checksum = "afdb263e73d22f39946f6022ed455b7561b22ff5553aca9be3c6a047fa39c328" dependencies = [ "findshlibs", "once_cell", @@ -6639,9 +7124,9 @@ dependencies = [ [[package]] name = "sentry-panic" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4dfe8371c9b2e126a8b64f6fefa54cef716ff2a50e63b5558a48b899265bccd" +checksum = "74fbf1c163f8b6a9d05912e1b272afa27c652e8b47ea60cb9a57ad5e481eea99" dependencies = [ "sentry-backtrace", "sentry-core", @@ -6649,9 +7134,9 @@ dependencies = [ [[package]] name = "sentry-tracing" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca8b88978677a27ee1a91beafe4052306c474c06f582321fde72d2e2cc2f7f" +checksum = "82eabcab0a047040befd44599a1da73d3adb228ff53b5ed9795ae04535577704" dependencies = [ "sentry-backtrace", "sentry-core", @@ -6661,46 +7146,62 @@ dependencies = [ [[package]] name = "sentry-types" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e7a88e0c1922d19b3efee12a8215f6a8a806e442e665ada71cc222cab72985f" +checksum = "da956cca56e0101998c8688bc65ce1a96f00673a0e58e663664023d4c7911e82" dependencies = [ "debugid", - "getrandom 0.2.10", "hex", + "rand 0.8.5", "serde", "serde_json", "thiserror", "time", "url", - "uuid 1.4.1", + "uuid 1.6.1", ] +[[package]] +name = "seq-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" + [[package]] name = "serde" -version = "1.0.185" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + [[package]] name = "serde_derive" -version = "1.0.185" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.105" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -6719,9 +7220,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -6756,7 +7257,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ "darling", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -6799,9 +7300,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -6824,8 +7325,18 @@ dependencies = [ [[package]] name = "sha2" version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes.git?rev=1731ced4a116d61ba9dc6ee6d0f38fb8102e357a#1731ced4a116d61ba9dc6ee6d0f38fb8102e357a" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -6847,8 +7358,17 @@ dependencies = [ [[package]] name = "sha3" version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes.git?rev=7a187e934c1f6c68e4b4e5cf37541b7a0d64d303#7a187e934c1f6c68e4b4e5cf37541b7a0d64d303" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.7", "keccak", @@ -6856,18 +7376,18 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook-registry" @@ -6890,9 +7410,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -6904,7 +7424,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-traits", "thiserror", "time", @@ -6916,6 +7436,16 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + [[package]] name = "skeptic" version = "0.13.7" @@ -6948,9 +7478,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" dependencies = [ "serde", ] @@ -6958,20 +7488,34 @@ dependencies = [ [[package]] name = "snark_wrapper" version = "0.1.0" -source = "git+https://github.com/matter-labs/snark-wrapper.git?branch=main#ce1453ed1d9cd25022a075ff5efb2fb387ea1ab9" +source = "git+https://github.com/matter-labs/snark-wrapper.git?branch=main#42661a9ff9d00853441589679c101f71e3785f55" dependencies = [ - "boojum", "derivative", - "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper)", "rand 0.4.6", "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2)", ] +[[package]] +name = "snow" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58021967fd0a5eeeb23b08df6cc244a4d4a5b4aec1d27c9e02fad1a58b4cd74e" +dependencies = [ + "aes-gcm", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "rustc_version", + "sha2 0.10.8", + "subtle", +] + [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi 0.3.9", @@ -6979,12 +7523,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -6994,8 +7538,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ "base64 0.13.1", - "bytes 1.4.0", - "futures 0.3.28", + "bytes 1.5.0", + "futures 0.3.29", "http", "httparse", "log", @@ -7005,9 +7549,9 @@ dependencies = [ [[package]] name = "solang-parser" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" dependencies = [ "itertools 0.11.0", "lalrpop", @@ -7023,6 +7567,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spki" version = "0.5.4" @@ -7045,9 +7595,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der 0.7.8", @@ -7086,13 +7636,13 @@ version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48c61941ccf5ddcada342cd59e3e5173b007c509e1e8e990dafc830294d9dc5" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", "atoi", "base64 0.13.1", "bigdecimal", "bitflags 1.3.2", "byteorder", - "bytes 1.4.0", + "bytes 1.5.0", "chrono", "crc", "crossbeam-queue 0.3.8", @@ -7122,7 +7672,7 @@ dependencies = [ "serde", "serde_json", "sha-1 0.10.1", - "sha2 0.10.6", + "sha2 0.10.8", "smallvec", "sqlformat", "sqlx-rt", @@ -7144,11 +7694,11 @@ dependencies = [ "heck 0.4.1", "hex", "once_cell", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.8", "sqlx-core", "sqlx-rt", "syn 1.0.109", @@ -7194,10 +7744,11 @@ dependencies = [ [[package]] name = "stringprep" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -7233,7 +7784,7 @@ checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck 0.3.3", "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -7263,7 +7814,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "rustversion", "syn 1.0.109", @@ -7276,10 +7827,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "rustversion", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7290,9 +7841,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "svm-rs" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597e3a746727984cb7ea2487b6a40726cad0dbe86628e7d429aa6b8c4c153db4" +checksum = "20689c7d03b6461b502d0b95d6c24874c7d24dea2688af80486a130a06af3b07" dependencies = [ "dirs 5.0.1", "fs2", @@ -7302,7 +7853,7 @@ dependencies = [ "semver", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "url", "zip", @@ -7325,18 +7876,18 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.29" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "unicode-ident", ] @@ -7344,7 +7895,7 @@ dependencies = [ [[package]] name = "sync_vm" version = "1.3.3" -source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#e819d15b107a06a746299f98bbd9802e26eeb348" +source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#ed8ab8984cae05d00d9d62196753c8d40df47c7d" dependencies = [ "arrayvec 0.7.4", "cs_derive 0.1.0 (git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3)", @@ -7352,7 +7903,7 @@ dependencies = [ "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=dev)", "hex", "itertools 0.10.5", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-derive 0.3.3", "num-integer", "num-traits", @@ -7360,11 +7911,8 @@ dependencies = [ "rand 0.4.6", "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon)", "serde", - "sha2 0.10.6", - "sha3 0.10.6", "smallvec", - "zk_evm 1.3.3", - "zkevm_opcode_defs 1.3.2", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3)", ] [[package]] @@ -7373,6 +7921,27 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tagptr" version = "0.2.0" @@ -7397,15 +7966,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if 1.0.0", - "fastrand 2.0.0", - "redox_syscall 0.3.5", + "fastrand 2.0.1", + "redox_syscall 0.4.1", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -7421,22 +7990,22 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" dependencies = [ "winapi-util", ] [[package]] name = "test-log" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9601d162c1d77e62c1ea0bc8116cd1caf143ce3af947536c3c9052a1677fe0c" +checksum = "f66edd6b6cd810743c0c71e1d085e92b01ce6a72782032e3f794c8284fe4bcdd" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 1.0.109", + "syn 2.0.39", ] [[package]] @@ -7450,22 +8019,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7478,14 +8047,26 @@ dependencies = [ "once_cell", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" -version = "0.3.25" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ "deranged", "itoa", + "libc", + "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -7493,15 +8074,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -7541,32 +8122,32 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.32.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ "backtrace", - "bytes 1.4.0", + "bytes 1.5.0", "libc", - "mio 0.8.8", + "mio 0.8.9", "num_cpus", "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.3", + "socket2 0.5.5", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7612,7 +8193,7 @@ dependencies = [ "tokio", "tokio-rustls", "tungstenite", - "webpki-roots 0.25.2", + "webpki-roots 0.25.3", ] [[package]] @@ -7621,7 +8202,7 @@ version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-core", "futures-sink", "log", @@ -7631,11 +8212,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-core", "futures-io", "futures-sink", @@ -7655,21 +8236,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.19.15", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -7691,7 +8272,29 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.2", + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -7713,7 +8316,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower-layer", "tower-service", "tracing", @@ -7721,14 +8324,14 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ "async-compression", - "base64 0.21.2", - "bitflags 2.4.0", - "bytes 1.4.0", + "base64 0.21.5", + "bitflags 2.4.1", + "bytes 1.5.0", "futures-core", "futures-util", "http", @@ -7741,12 +8344,12 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower", "tower-layer", "tower-service", "tracing", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -7763,11 +8366,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if 1.0.0", "log", "pin-project-lite", "tracing-attributes", @@ -7776,20 +8378,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -7807,12 +8409,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -7828,9 +8430,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", @@ -7850,9 +8452,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" [[package]] name = "try-lock" @@ -7867,7 +8469,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", - "bytes 1.4.0", + "bytes 1.5.0", "data-encoding", "http", "httparse", @@ -7882,9 +8484,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" @@ -7913,6 +8515,12 @@ dependencies = [ "libc", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicase" version = "2.7.0" @@ -7930,9 +8538,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -7951,9 +8559,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -7973,6 +8581,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "unroll" version = "0.1.5" @@ -7989,13 +8607,19 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "ureq" -version = "2.7.1" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "log", "native-tls", "once_cell", @@ -8004,12 +8628,12 @@ dependencies = [ [[package]] name = "url" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna", + "idna 0.5.0", "percent-encoding", "serde", ] @@ -8038,17 +8662,17 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "serde", ] [[package]] name = "uuid" -version = "1.4.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "serde", ] @@ -8079,7 +8703,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vise" version = "0.1.0" -source = "git+https://github.com/matter-labs/vise.git?rev=9d097ab747b037b6e62504df1db5b975425b6bdd#9d097ab747b037b6e62504df1db5b975425b6bdd" +source = "git+https://github.com/matter-labs/vise.git?rev=dd05139b76ab0843443ab3ff730174942c825dae#dd05139b76ab0843443ab3ff730174942c825dae" dependencies = [ "elsa", "linkme", @@ -8091,7 +8715,7 @@ dependencies = [ [[package]] name = "vise-exporter" version = "0.1.0" -source = "git+https://github.com/matter-labs/vise.git?rev=9d097ab747b037b6e62504df1db5b975425b6bdd#9d097ab747b037b6e62504df1db5b975425b6bdd" +source = "git+https://github.com/matter-labs/vise.git?rev=dd05139b76ab0843443ab3ff730174942c825dae#dd05139b76ab0843443ab3ff730174942c825dae" dependencies = [ "hyper", "metrics-exporter-prometheus", @@ -8104,17 +8728,17 @@ dependencies = [ [[package]] name = "vise-macros" version = "0.1.0" -source = "git+https://github.com/matter-labs/vise.git?rev=9d097ab747b037b6e62504df1db5b975425b6bdd#9d097ab747b037b6e62504df1db5b975425b6bdd" +source = "git+https://github.com/matter-labs/vise.git?rev=dd05139b76ab0843443ab3ff730174942c825dae#dd05139b76ab0843443ab3ff730174942c825dae" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "vlog" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "chrono", "sentry", @@ -8124,176 +8748,72 @@ dependencies = [ ] [[package]] -name = "vm" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ - "anyhow", - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "vise", - "zk_evm 1.4.0", - "zksync_config", - "zksync_contracts", - "zksync_state", - "zksync_types", - "zksync_utils", + "same-file", + "winapi-util", ] [[package]] -name = "vm_1_3_2" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "anyhow", - "ethabi 18.0.0", - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "zk_evm 1.3.3", - "zkevm-assembly 1.3.2", - "zksync_config", - "zksync_contracts", - "zksync_state", - "zksync_types", - "zksync_utils", + "try-lock", ] [[package]] -name = "vm_m5" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "vlog", - "zk_evm 1.3.1", - "zksync_config", - "zksync_contracts", - "zksync_crypto", - "zksync_state", - "zksync_storage", - "zksync_types", - "zksync_utils", + "cfg-if 1.0.0", + "wasm-bindgen-macro", ] [[package]] -name = "vm_m6" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ - "hex", - "itertools 0.10.5", + "bumpalo", + "log", "once_cell", - "thiserror", - "tracing", - "vlog", - "zk_evm 1.3.1", - "zkevm-assembly 1.3.1", - "zksync_config", - "zksync_contracts", - "zksync_crypto", - "zksync_state", - "zksync_storage", - "zksync_types", - "zksync_utils", -] - -[[package]] -name = "vm_virtual_blocks" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" -dependencies = [ - "anyhow", - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "vise", - "zk_evm 1.3.3", - "zksync_config", - "zksync_contracts", - "zksync_state", - "zksync_types", - "zksync_utils", -] - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -8303,9 +8823,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote 1.0.33", "wasm-bindgen-macro-support", @@ -8313,22 +8833,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "wasm-streams" @@ -8345,9 +8865,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -8360,16 +8880,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5388522c899d1e1c96a4c307e3797e0f697ba7c77dd8e0e625ecba9dd0342937" dependencies = [ "arrayvec 0.7.4", - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "derive_more", "ethabi 18.0.0", "ethereum-types 0.14.1", - "futures 0.3.28", + "futures 0.3.29", "futures-timer", "headers", "hex", - "idna", + "idna 0.4.0", "jsonrpc-core 18.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "log", "once_cell", @@ -8395,9 +8915,21 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] [[package]] name = "whoami" @@ -8439,9 +8971,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi 0.3.9", ] @@ -8453,12 +8985,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -8467,7 +8999,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -8476,13 +9017,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -8491,47 +9047,89 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" -version = "0.5.14" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -8543,7 +9141,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if 1.0.0", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -8563,7 +9161,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" dependencies = [ "async_io_stream", - "futures 0.3.28", + "futures 0.3.29", "js-sys", "log", "pharos", @@ -8596,11 +9194,45 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "zerocopy" +version = "0.7.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43de342578a3a14a9314a2dab1942cbfcbe5686e1f91acdc513058063eafe18" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1012d89e3acb79fad7a799ce96866cfb8098b74638465ea1b1533d35900ca90" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] + [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] [[package]] name = "zip" @@ -8625,9 +9257,9 @@ dependencies = [ [[package]] name = "zk_evm" version = "1.3.1" -source = "git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.1-rc0#877ba31cc1d82316fd924e8d83a9f5f1a77b1b9a" +source = "git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.1-rc2#0a7c775932db4839ff6b7fb0db9bdb3583ab54c0" dependencies = [ - "blake2 0.10.6", + "blake2 0.10.6 (git+https://github.com/RustCrypto/hashes.git?rev=1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e)", "k256 0.11.6", "lazy_static", "num 0.4.1", @@ -8642,7 +9274,7 @@ dependencies = [ [[package]] name = "zk_evm" version = "1.3.3" -source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3#fe8215a7047d24430ad470cf15a19bedb4d6ba0b" +source = "git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2#fbee20f5bac7d6ca3e22ae69b2077c510a07de4e" dependencies = [ "anyhow", "lazy_static", @@ -8656,8 +9288,8 @@ dependencies = [ [[package]] name = "zk_evm" -version = "1.4.0" -source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.4.0#e33a5ded1b53e35d261fdb46e6d16f2c900b217f" +version = "1.3.3" +source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3#fbee20f5bac7d6ca3e22ae69b2077c510a07de4e" dependencies = [ "anyhow", "lazy_static", @@ -8670,33 +9302,29 @@ dependencies = [ ] [[package]] -name = "zk_evm_abstractions" -version = "0.1.0" -source = "git+https://github.com/matter-labs/era-zk_evm_abstractions.git#7502a661d7d38906d849dcd3e7a15e5848af6581" +name = "zk_evm" +version = "1.4.0" +source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.4.0#dd76fc5badf2c05278a21b38015a7798fe2fe358" dependencies = [ "anyhow", + "lazy_static", + "num 0.4.1", "serde", + "serde_json", "static_assertions", + "zk_evm_abstractions", "zkevm_opcode_defs 1.3.2", ] [[package]] -name = "zkevm-assembly" -version = "1.3.1" -source = "git+https://github.com/matter-labs/era-zkEVM-assembly.git?tag=v1.3.1-rc0#dabbb07e84dd886ee90dde2b5dde0acbf9b0123a" +name = "zk_evm_abstractions" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-zk_evm_abstractions.git#15a2af404902d5f10352e3d1fac693cc395fcff9" dependencies = [ - "env_logger 0.9.3", - "hex", - "lazy_static", - "log", - "nom", - "num-bigint 0.4.3", - "num-traits", - "sha3 0.10.6", - "smallvec", - "structopt", - "thiserror", - "zkevm_opcode_defs 1.3.1", + "anyhow", + "serde", + "static_assertions", + "zkevm_opcode_defs 1.3.2", ] [[package]] @@ -8709,9 +9337,9 @@ dependencies = [ "lazy_static", "log", "nom", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-traits", - "sha3 0.10.6", + "sha3 0.10.8", "smallvec", "structopt", "thiserror", @@ -8721,7 +9349,7 @@ dependencies = [ [[package]] name = "zkevm_circuits" version = "1.4.0" -source = "git+https://github.com/matter-labs/era-zkevm_circuits.git?branch=main#4fba537ccecc238e2da9c80844dc8c185e42466f" +source = "git+https://github.com/matter-labs/era-zkevm_circuits.git?branch=main#fb3e2574b5c890342518fc930c145443f039a105" dependencies = [ "arrayvec 0.7.4", "bincode", @@ -8732,6 +9360,7 @@ dependencies = [ "itertools 0.10.5", "rand 0.4.6", "rand 0.8.5", + "seq-macro", "serde", "serde_json", "smallvec", @@ -8746,16 +9375,16 @@ dependencies = [ "bitflags 1.3.2", "ethereum-types 0.14.1", "lazy_static", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "zkevm_opcode_defs" version = "1.3.2" -source = "git+https://github.com/matter-labs/era-zkevm_opcode_defs.git?branch=v1.3.2#c7ab62f4c60b27dfc690c3ab3efb5fff1ded1a25" +source = "git+https://github.com/matter-labs/era-zkevm_opcode_defs.git?branch=v1.3.2#dffacadeccdfdbff4bc124d44c595c4a6eae5013" dependencies = [ - "bitflags 2.4.0", - "blake2 0.10.6", + "bitflags 2.4.1", + "blake2 0.10.6 (git+https://github.com/RustCrypto/hashes.git?rev=1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e)", "ethereum-types 0.14.1", "k256 0.11.6", "lazy_static", @@ -8766,16 +9395,16 @@ dependencies = [ [[package]] name = "zkevm_test_harness" version = "1.3.3" -source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.3.3#5fe3b73dba7c98e724358428ae10723c4758dfb5" +source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.3.3#d52b56d6ba8196c8a3c74c4933654469e6f27a5a" dependencies = [ "bincode", "circuit_testing", "codegen 0.2.0", "crossbeam 0.8.2", "derivative", - "env_logger 0.9.3", + "env_logger 0.10.1", "hex", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", "rayon", @@ -8786,32 +9415,31 @@ dependencies = [ "sync_vm", "test-log", "tracing", - "zk_evm 1.3.3", - "zkevm-assembly 1.3.2", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3)", + "zkevm-assembly", ] [[package]] name = "zkevm_test_harness" version = "1.4.0" -source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#3cd647aa57fc2e1180bab53f7a3b61ec47502a46" +source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#d2e3670e0c5115b7cc7cc24e6d3dbdd17a214aad" dependencies = [ "bincode", "circuit_definitions", "codegen 0.2.0", "crossbeam 0.8.2", "derivative", - "env_logger 0.9.3", + "env_logger 0.10.1", "hex", + "rand 0.4.6", "rayon", - "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2)", "serde", "serde_json", "smallvec", - "snark_wrapper", "structopt", "test-log", "tracing", - "zkevm-assembly 1.3.2", + "zkevm-assembly", ] [[package]] @@ -8821,8 +9449,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15bc9b106393359ac013c2527db318ced4ca838d26ef03488233af557ebe5da8" dependencies = [ "async-trait", - "clap 4.3.23", - "env_logger 0.10.0", + "clap 4.4.10", + "env_logger 0.10.1", "ethers", "ethers-contract", "hex", @@ -8838,7 +9466,7 @@ dependencies = [ [[package]] name = "zksync_basic_types" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "serde", "serde_json", @@ -8848,13 +9476,13 @@ dependencies = [ [[package]] name = "zksync_circuit_breaker" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", "backon", "convert_case 0.6.0", - "futures 0.3.28", + "futures 0.3.29", "hex", "metrics", "serde_json", @@ -8868,29 +9496,193 @@ dependencies = [ "zksync_types", ] +[[package]] +name = "zksync_commitment_utils" +version = "0.1.0" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" +dependencies = [ + "zkevm_test_harness 1.4.0", + "zksync_types", + "zksync_utils", +] + +[[package]] +name = "zksync_concurrency" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "once_cell", + "pin-project", + "rand 0.8.5", + "sha3 0.10.8", + "thiserror", + "time", + "tokio", + "tracing", + "tracing-subscriber", + "vise", +] + [[package]] name = "zksync_config" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", - "bigdecimal", - "envy", + "serde", + "zksync_basic_types", +] + +[[package]] +name = "zksync_consensus_bft" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "once_cell", + "rand 0.8.5", + "thiserror", + "tracing", + "vise", + "zksync_concurrency", + "zksync_consensus_crypto", + "zksync_consensus_network", + "zksync_consensus_roles", + "zksync_consensus_storage", + "zksync_consensus_utils", + "zksync_protobuf", +] + +[[package]] +name = "zksync_consensus_crypto" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "blst", + "ed25519-dalek", + "ff_ce", "hex", - "num 0.3.1", + "pairing_ce 0.28.5 (git+https://github.com/matter-labs/pairing.git?rev=f55393f)", + "rand 0.4.6", + "rand 0.8.5", + "sha3 0.10.8", + "thiserror", + "tracing", +] + +[[package]] +name = "zksync_consensus_executor" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "prost", + "rand 0.8.5", + "tracing", + "vise", + "zksync_concurrency", + "zksync_consensus_bft", + "zksync_consensus_crypto", + "zksync_consensus_network", + "zksync_consensus_roles", + "zksync_consensus_storage", + "zksync_consensus_sync_blocks", + "zksync_consensus_utils", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_network" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "async-trait", + "im", "once_cell", + "pin-project", + "prost", + "rand 0.8.5", + "snow", + "thiserror", + "tracing", + "vise", + "zksync_concurrency", + "zksync_consensus_crypto", + "zksync_consensus_roles", + "zksync_consensus_utils", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_roles" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "bit-vec", + "hex", + "prost", + "rand 0.8.5", "serde", - "serde_json", - "url", - "zksync_basic_types", - "zksync_contracts", - "zksync_utils", + "thiserror", + "tracing", + "zksync_concurrency", + "zksync_consensus_crypto", + "zksync_consensus_utils", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_storage" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "async-trait", + "prost", + "rand 0.8.5", + "thiserror", + "tracing", + "zksync_concurrency", + "zksync_consensus_roles", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_sync_blocks" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "thiserror", + "tracing", + "zksync_concurrency", + "zksync_consensus_network", + "zksync_consensus_roles", + "zksync_consensus_storage", + "zksync_consensus_utils", +] + +[[package]] +name = "zksync_consensus_utils" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "thiserror", + "zksync_concurrency", ] [[package]] name = "zksync_contracts" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "envy", "ethabi 18.0.0", @@ -8904,7 +9696,7 @@ dependencies = [ [[package]] name = "zksync_core" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "actix-cors", "actix-rt", @@ -8916,7 +9708,7 @@ dependencies = [ "bitflags 1.3.2", "chrono", "ctrlc", - "futures 0.3.28", + "futures 0.3.29", "governor", "hex", "itertools 0.10.5", @@ -8931,6 +9723,7 @@ dependencies = [ "num 0.3.1", "once_cell", "prometheus_exporter", + "prost", "rand 0.8.5", "reqwest", "serde", @@ -8940,11 +9733,15 @@ dependencies = [ "tower", "tower-http", "tracing", + "vise", "vlog", - "vm", - "zkevm_test_harness 1.4.0", "zksync_circuit_breaker", + "zksync_commitment_utils", + "zksync_concurrency", "zksync_config", + "zksync_consensus_executor", + "zksync_consensus_roles", + "zksync_consensus_storage", "zksync_contracts", "zksync_dal", "zksync_eth_client", @@ -8954,10 +9751,13 @@ dependencies = [ "zksync_merkle_tree", "zksync_mini_merkle_tree", "zksync_object_store", + "zksync_protobuf", + "zksync_protobuf_build", "zksync_prover_utils", "zksync_queued_job_processor", "zksync_state", "zksync_storage", + "zksync_system_constants", "zksync_types", "zksync_utils", "zksync_verification_key_generator_and_server", @@ -8967,10 +9767,10 @@ dependencies = [ [[package]] name = "zksync_crypto" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "base64 0.13.1", - "blake2 0.10.6", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "hex", "once_cell", "serde", @@ -8982,7 +9782,7 @@ dependencies = [ [[package]] name = "zksync_dal" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "bigdecimal", @@ -8991,6 +9791,8 @@ dependencies = [ "itertools 0.10.5", "num 0.3.1", "once_cell", + "prost", + "rand 0.8.5", "serde", "serde_json", "sqlx", @@ -8998,10 +9800,14 @@ dependencies = [ "thiserror", "tokio", "tracing", + "url", "vise", - "zksync_config", + "zksync_consensus_roles", "zksync_contracts", "zksync_health_check", + "zksync_protobuf", + "zksync_protobuf_build", + "zksync_system_constants", "zksync_types", "zksync_utils", ] @@ -9009,7 +9815,7 @@ dependencies = [ [[package]] name = "zksync_eth_client" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", @@ -9029,7 +9835,7 @@ dependencies = [ [[package]] name = "zksync_eth_signer" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "async-trait", "hex", @@ -9048,10 +9854,10 @@ dependencies = [ [[package]] name = "zksync_health_check" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "async-trait", - "futures 0.3.28", + "futures 0.3.29", "serde", "serde_json", "tokio", @@ -9061,7 +9867,7 @@ dependencies = [ [[package]] name = "zksync_mempool" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "tracing", "zksync_types", @@ -9070,7 +9876,7 @@ dependencies = [ [[package]] name = "zksync_merkle_tree" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "leb128", "once_cell", @@ -9087,7 +9893,7 @@ dependencies = [ [[package]] name = "zksync_mini_merkle_tree" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "once_cell", "zksync_basic_types", @@ -9097,7 +9903,7 @@ dependencies = [ [[package]] name = "zksync_object_store" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", @@ -9112,15 +9918,49 @@ dependencies = [ "zksync_types", ] +[[package]] +name = "zksync_protobuf" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "bit-vec", + "once_cell", + "prost", + "prost-reflect", + "quick-protobuf", + "rand 0.8.5", + "serde", + "serde_json", + "zksync_concurrency", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_protobuf_build" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "heck 0.4.1", + "prettyplease", + "proc-macro2 1.0.70", + "prost-build", + "prost-reflect", + "protox", + "quote 1.0.33", + "syn 2.0.39", +] + [[package]] name = "zksync_prover_utils" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", "ctrlc", - "futures 0.3.28", + "futures 0.3.29", "regex", "reqwest", "tokio", @@ -9135,23 +9975,23 @@ dependencies = [ [[package]] name = "zksync_queued_job_processor" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", "tokio", "tracing", + "vise", "zksync_utils", ] [[package]] name = "zksync_state" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "itertools 0.10.5", - "metrics", "mini-moka", "tokio", "tracing", @@ -9165,7 +10005,7 @@ dependencies = [ [[package]] name = "zksync_storage" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "num_cpus", "once_cell", @@ -9174,12 +10014,31 @@ dependencies = [ "vise", ] +[[package]] +name = "zksync_system_constants" +version = "0.1.0" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" +dependencies = [ + "anyhow", + "bigdecimal", + "hex", + "num 0.3.1", + "once_cell", + "serde", + "serde_json", + "url", + "zksync_basic_types", + "zksync_contracts", + "zksync_utils", +] + [[package]] name = "zksync_types" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ - "blake2 0.10.6", + "anyhow", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "chrono", "codegen 0.1.0", "ethereum-types 0.12.1", @@ -9194,24 +10053,27 @@ dependencies = [ "serde_with", "strum 0.24.1", "thiserror", - "zk_evm 1.3.3", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2)", "zk_evm 1.4.0", "zkevm_test_harness 1.3.3", "zksync_basic_types", - "zksync_config", + "zksync_consensus_roles", "zksync_contracts", "zksync_mini_merkle_tree", + "zksync_protobuf", + "zksync_protobuf_build", + "zksync_system_constants", "zksync_utils", ] [[package]] name = "zksync_utils" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "bigdecimal", - "futures 0.3.28", + "futures 0.3.29", "hex", "itertools 0.10.5", "metrics", @@ -9222,14 +10084,14 @@ dependencies = [ "tokio", "tracing", "vlog", - "zk_evm 1.3.3", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2)", "zksync_basic_types", ] [[package]] name = "zksync_verification_key_generator_and_server" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "bincode", @@ -9249,7 +10111,7 @@ dependencies = [ [[package]] name = "zksync_web3_decl" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "bigdecimal", "chrono", @@ -9280,6 +10142,15 @@ dependencies = [ "zstd-safe 6.0.6", ] +[[package]] +name = "zstd" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" +dependencies = [ + "zstd-safe 7.0.0", +] + [[package]] name = "zstd-safe" version = "5.0.2+zstd.1.5.2" @@ -9300,13 +10171,26 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" +dependencies = [ + "zstd-sys", +] + [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] + +[[patch.unused]] +name = "sha3" +version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes?tag=sha3-v0.10.6#7a187e934c1f6c68e4b4e5cf37541b7a0d64d303" diff --git a/Cargo.toml b/Cargo.toml index b5802ed8..83a0d561 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "era_test_node" -version = "0.1.0-alpha.5" +version = "0.1.0-alpha.12" edition = "2018" authors = ["The Matter Labs Team "] homepage = "https://zksync.io/" @@ -11,15 +11,15 @@ categories = ["cryptography"] publish = false # We don't want to publish our binaries. [dependencies] -zksync_basic_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_core = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -vm = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_contracts = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_utils = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_state = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_web3_decl = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } - +zksync_basic_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_core = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +multivm = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_contracts = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_utils = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_state = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_web3_decl = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +sha3 = "0.10.6" openssl-sys = { version = "0.9", features = ["vendored"] } @@ -38,7 +38,7 @@ clap = { version = "4.2.4", features = ["derive"] } reqwest = { version = "0.11", features = ["blocking"] } serde = { version = "1.0", features = ["derive"] } tracing = { version = "0.1.26", features = ["log"] } -tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter", "time", "json"] } +tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter", "time", "json", "local-time"] } colored = "2.0" lazy_static = "1.4" eyre = "0.6" @@ -50,10 +50,14 @@ itertools = "0.10.5" rustc-hash = "1.1.0" indexmap = "2.0.1" chrono = { version = "0.4.31", default-features = false } +time = "0.3.30" [dev-dependencies] httptest = "0.15.4" tempdir = "0.3.7" maplit = "1.0.2" zksync-web3-rs = "0.1.1" -ethers = { version = "2.0.4", features = ["rustls"] } \ No newline at end of file +ethers = { version = "2.0.4", features = ["rustls"] } + +[patch.crates-io] +sha3 = { git = "https://github.com/RustCrypto/hashes", tag = "sha3-v0.10.6" } diff --git a/Makefile b/Makefile index 8ca281bc..51efd64e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # Build the system contracts build-contracts: - cd etc/system-contracts && yarn; yarn install; yarn build; yarn preprocess; yarn compile-yul + cd etc/system-contracts && yarn; yarn install; yarn build ./scripts/refresh_contracts.sh # Clean the system contracts @@ -10,7 +10,7 @@ clean-contracts: # Rebuild the system contracts rebuild-contracts: - cd etc/system-contracts && yarn build; yarn preprocess; yarn build-bootloader + cd etc/system-contracts && yarn build ./scripts/refresh_contracts.sh ./scripts/refresh_test_contracts.sh diff --git a/SUPPORTED_APIS.md b/SUPPORTED_APIS.md index 0b5db81f..c5ad27f9 100644 --- a/SUPPORTED_APIS.md +++ b/SUPPORTED_APIS.md @@ -111,13 +111,14 @@ The `status` options are: | [`NETWORK`](#network-namespace) | [`net_version`](#net_version) | `SUPPORTED` | Returns the current network id
_(default is `260`)_ | | [`NETWORK`](#network-namespace) | [`net_peerCount`](#net_peercount) | `SUPPORTED` | Returns the number of peers currently connected to the client
_(hard-coded to `0`)_ | | [`NETWORK`](#network-namespace) | [`net_listening`](#net_listening) | `SUPPORTED` | Returns `true` if the client is actively listening for network connections
_(hard-coded to `false`)_ | +| [`WEB3`](#web3-namespace) | [`web3_clientVersion`](#web3_clientversion) | `SUPPORTED` | Returns `zkSync/v2.0` | | [`ZKS`](#zks-namespace) | [`zks_estimateFee`](#zks_estimateFee) | `SUPPORTED` | Gets the Fee estimation data for a given Request | | `ZKS` | `zks_estimateGasL1ToL2` | `NOT IMPLEMENTED` | Estimate of the gas required for a L1 to L2 transaction | -| `ZKS` | `zks_getAllAccountBalances` | `NOT IMPLEMENTED` | Returns all balances for confirmed tokens given by an account address | +| [`ZKS`](#zks-namespace) | [`zks_getAllAccountBalances`](#zks_getallaccountbalances) | `SUPPORTED` | Returns all balances for confirmed tokens given by an account address | | [`ZKS`](#zks-namespace) | [`zks_getBridgeContracts`](#zks_getbridgecontracts) | `SUPPORTED` | Returns L1/L2 addresses of default bridges | | [`ZKS`](#zks-namespace) | [`zks_getBlockDetails`](#zks_getblockdetails) | `SUPPORTED` | Returns additional zkSync-specific information about the L2 block | | `ZKS` | `zks_getBytecodeByHash` | `NOT IMPLEMENTED` | Returns bytecode of a transaction given by its hash | -| `ZKS` | `zks_getConfirmedTokens` | `NOT IMPLEMENTED` | Returns [address, symbol, name, and decimal] information of all tokens within a range of ids given by parameters `from` and `limit` | +| [`ZKS`](#zks-namespace) | [`zks_getConfirmedTokens`](#zks_getconfirmedtokens) | `SUPPORTED` | Returns [address, symbol, name, and decimal] information of all tokens within a range of ids given by parameters `from` and `limit` | | `ZKS` | `zks_getL1BatchBlockRange` | `NOT IMPLEMENTED` | Returns the range of blocks contained within a batch given by batch number | | `ZKS` | `zks_getL1BatchDetails` | `NOT IMPLEMENTED` | Returns data pertaining to a given batch | | `ZKS` | `zks_getL2ToL1LogProof` | `NOT IMPLEMENTED` | Given a transaction hash, and an index of the L2 to L1 log produced within the transaction, it returns the proof for the corresponding L2 to L1 log | @@ -134,7 +135,7 @@ The `status` options are: ### `config_getShowCalls` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Gets the current value of `show_calls` that's originally set with `--show-calls` option @@ -157,7 +158,7 @@ curl --request POST \ ### `config_getCurrentTimestamp` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Gets the value of `current_timestamp` for the node @@ -180,7 +181,7 @@ curl --request POST \ ### `config_setShowCalls` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_calls` to print more detailed call traces @@ -203,7 +204,7 @@ curl --request POST \ ### `config_setShowStorageLogs` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_storage_logs` to print storage log reads/writes @@ -226,7 +227,7 @@ curl --request POST \ ### `config_setShowVmDetails` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_vm_details` to print more detailed results from vm execution @@ -249,7 +250,7 @@ curl --request POST \ ### `config_setShowGasDetails` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_gas_details` to print more details about gas estimation and usage @@ -272,7 +273,7 @@ curl --request POST \ ### `config_setResolveHashes` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `resolve-hashes` to call OpenChain for human-readable ABI names in call traces @@ -295,7 +296,7 @@ curl --request POST \ ### `config_setLogLevel` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Sets the logging level for the node and only displays the node logs. @@ -318,7 +319,7 @@ curl --request POST \ ### `config_setLogging` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Sets the fine-tuned logging levels for the node and any of its dependencies. The directive format is comma-separated `module=level` for any number of modules. @@ -344,7 +345,7 @@ curl --request POST \ ### `debug_traceCall` -[source](src/debug.rs) +[source](src/node/debug.rs) The `debug_traceCall` is similar to `eth_call` but returns call traces for each call. @@ -388,7 +389,7 @@ curl --request POST \ ### `debug_traceTransaction` -[source](src/debug.rs) +[source](src/node/debug.rs) Returns call traces for the transaction with given hash. @@ -425,7 +426,7 @@ curl --request POST \ ### `debug_traceBlockByHash` -[source](src/debug.rs) +[source](src/node/debug.rs) Returns call traces for each transaction within a given block. @@ -462,7 +463,7 @@ curl --request POST \ ### `debug_traceBlockByNumber` -[source](src/debug.rs) +[source](src/node/debug.rs) Returns call traces for each transaction within a given block. @@ -501,7 +502,7 @@ curl --request POST \ ### `net_version` -[source](src/net.rs) +[source](src/node/net.rs) Returns the current network id @@ -524,7 +525,7 @@ curl --request POST \ ### `net_peerCount` -[source](src/net.rs) +[source](src/node/net.rs) Returns the number of connected peers @@ -547,7 +548,7 @@ curl --request POST \ ### `net_listening` -[source](src/net.rs) +[source](src/node/net.rs) Returns `true` if the node is listening for connections @@ -572,7 +573,7 @@ curl --request POST \ ### `eth_accounts` -[source](src/node.rs) +[source](src/node/eth.rs) Returns a list of addresses owned by client @@ -595,7 +596,7 @@ curl --request POST \ ### `eth_chainId` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the current chain id @@ -618,7 +619,7 @@ curl --request POST \ ### `eth_estimateGas` -[source](src/node.rs) +[source](src/node/eth.rs) Generates and returns an estimate of how much gas is necessary to allow the transaction to complete @@ -654,7 +655,7 @@ curl --request POST \ ### `eth_feeHistory` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the fee history for a given range of blocks @@ -679,7 +680,7 @@ curl --request POST \ ### `eth_gasPrice` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the current price per gas in wei @@ -702,7 +703,7 @@ curl --request POST \ ### `eth_getBalance` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the balance of the account of given address @@ -732,7 +733,7 @@ curl --request POST \ ### `eth_getBlockByHash` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a block by block hash @@ -762,7 +763,7 @@ curl --request POST \ ### `eth_getBlockByNumber` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a block by block number @@ -792,7 +793,7 @@ curl --request POST \ ### `eth_getBlockTransactionCountByHash` -[source](src/node.rs) +[source](src/node/eth.rs) Number of transactions in a block from a block matching the given block hash @@ -820,7 +821,7 @@ curl --request POST \ ### `eth_getBlockTransactionCountByNumber` -[source](src/node.rs) +[source](src/node/eth.rs) Number of transactions in a block from a block matching the given block number @@ -849,7 +850,7 @@ curl --request POST \ ### `eth_getFilterChanges` -[source](src/node.rs) +[source](src/node/eth.rs) Polling method for a filter, which returns an array of logs, block hashes, or transaction hashes, depending on the filter type, which occurred since last poll @@ -877,7 +878,7 @@ curl --request POST \ ### `eth_newBlockFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Creates a filter in the node, to notify when a new block arrives @@ -904,7 +905,7 @@ curl --request POST \ ### `eth_newFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Creates a filter object, based on filter options, to notify when the state changes (logs) @@ -937,7 +938,7 @@ curl --request POST \ ### `eth_newPendingTransactionFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Creates a filter in the node, to notify when new pending transactions arrive @@ -964,7 +965,7 @@ curl --request POST \ ### `eth_uninstallFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Uninstalls a filter with given id @@ -992,7 +993,7 @@ curl --request POST \ ### `eth_getFilterLogs` -[source](src/node.rs) +[source](src/node/eth.rs) Returns an array of all logs matching filter with given id @@ -1020,7 +1021,7 @@ curl --request POST \ ### `eth_getLogs` -[source](src/node.rs) +[source](src/node/eth.rs) Returns an array of all logs matching a filter @@ -1053,7 +1054,7 @@ curl --request POST \ ### `eth_getCode` -[source](src/node.rs) +[source](src/node/eth.rs) Returns code at a given address @@ -1083,7 +1084,7 @@ curl --request POST \ ### `eth_getTransactionByHash` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the information about a transaction requested by transaction hash @@ -1111,7 +1112,7 @@ curl --request POST \ ### `eth_getTransactionCount` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the number of transactions sent from an address @@ -1141,7 +1142,7 @@ curl --request POST \ ### `eth_getTransactionReceipt` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the transaction receipt for a given transaction hash @@ -1169,7 +1170,7 @@ curl --request POST \ ### `eth_blockNumber` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the number of most recent block @@ -1192,7 +1193,7 @@ curl --request POST \ ### `eth_call` -[source](src/node.rs) +[source](src/node/eth.rs) Executes a new message call immediately without creating a transaction on the block chain @@ -1230,7 +1231,7 @@ curl --request POST \ ### `eth_sendRawTransaction` -[source](src/node.rs) +[source](src/node/eth.rs) Creates new message call transaction or a contract creation for signed transactions @@ -1254,7 +1255,7 @@ curl --request POST \ ### `eth_syncing` -[source](src/node.rs) +[source](src/node/eth.rs) Returns syncing status of the node. This will always return `false`. @@ -1278,7 +1279,7 @@ curl --request POST \ ### `eth_getStorageAt` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the value from a storage position at a given address. @@ -1308,7 +1309,7 @@ curl --request POST \ ### `eth_getTransactionByBlockHashAndIndex` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a transaction by block hash and transaction index position @@ -1337,7 +1338,7 @@ curl --request POST \ ### `eth_getTransactionByBlockNumberAndIndex` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a transaction by block number and transaction index position @@ -1366,7 +1367,7 @@ curl --request POST \ ### `eth_protocolVersion` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the current ethereum protocol version. @@ -1395,7 +1396,7 @@ curl --request POST \ ### `hardhat_setBalance` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Sets the balance of the given address to the given balance. @@ -1427,7 +1428,7 @@ curl --request POST \ ### `hardhat_setNonce` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Modifies an account's nonce by overwriting it. The new nonce must be greater than the existing nonce. @@ -1456,7 +1457,7 @@ curl --request POST \ ### `hardhat_mine` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Sometimes you may want to advance the latest block number of the network by a large number of blocks. One way to do this would be to call the evm_mine RPC method multiple times, but this is too slow if you want to mine thousands of blocks. @@ -1486,7 +1487,7 @@ curl --request POST \ ``` ### `hardhat_impersonateAccount` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Begin impersonating account- subsequent transactions sent to the node will be committed as if they were initiated by the supplied address. @@ -1512,7 +1513,7 @@ curl --request POST \ ### `hardhat_stopImpersonatingAccount` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Stop impersonating account, should be used after calling `hardhat_impersonateAccount`. Since we only impersonate one account at a time, the `address` argument is ignored and the current @@ -1540,7 +1541,7 @@ curl --request POST \ ### `hardhat_setCode` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Sets the code for a given address. @@ -1574,7 +1575,7 @@ curl --request POST \ ### `evm_mine` -[source](src/evm.rs) +[source](src/node/evm.rs) Mines an empty block @@ -1594,7 +1595,7 @@ curl --request POST \ ### `evm_increaseTime` -[source](src/evm.rs) +[source](src/node/evm.rs) Increase the current timestamp for the node @@ -1617,7 +1618,7 @@ curl --request POST \ ### `evm_setNextBlockTimestamp` -[source](src/evm.rs) +[source](src/node/evm.rs) Sets the timestamp of the next block but doesn't mine one.. @@ -1640,7 +1641,7 @@ curl --request POST \ ### `evm_setTime` -[source](src/evm.rs) +[source](src/node/evm.rs) Set the current timestamp for the node. Warning: This will allow you to move _backwards_ in time, which may cause new blocks to appear to be mined before old blocks. This will result in an invalid state. @@ -1664,7 +1665,7 @@ curl --request POST \ ### `evm_snapshot` -[source](src/evm.rs) +[source](src/node/evm.rs) Snapshot the state of the blockchain at the current block. @@ -1687,7 +1688,7 @@ curl --request POST \ ### `evm_revert` -[source](src/evm.rs) +[source](src/node/evm.rs) Revert the state of the blockchain to a previous snapshot @@ -1708,11 +1709,40 @@ curl --request POST \ --data '{"jsonrpc": "2.0","id": "1","method": "evm_revert","params": ["0x1"]}' ``` +## `WEB3 NAMESPACE` + +### `web3_clientVersion` + +[source](src/node/web3.rs) + +Returns the client version + +#### Arguments + ++ _NONE_ + +#### Status + +`SUPPORTED` + +#### Example + +```bash +curl --request POST \ + --url http://localhost:8011/ \ + --header 'content-type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "id": "1", + "method": "web3_clientVersion" + }' +``` + ## `ZKS NAMESPACE` ### `zks_estimateFee` -[source](src/zks.rs) +[source](src/node/zks.rs) Generates and returns an estimate of how much gas is necessary to allow the transaction to complete @@ -1748,7 +1778,7 @@ curl --request POST \ ### `zks_getTokenPrice` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns the token price given an Address @@ -1771,7 +1801,7 @@ curl --request POST \ ### `zks_getTransactionDetails` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns data from a specific transaction given by the transaction hash. @@ -1794,7 +1824,7 @@ curl --request POST \ ### `zks_getBlockDetails` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns additional zkSync-specific information about the L2 block. @@ -1817,7 +1847,7 @@ curl --request POST \ ### `zks_getBridgeContracts` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns L1/L2 addresses of default bridges. @@ -1844,7 +1874,7 @@ curl --request POST \ ### `zks_getRawBlockTransactions` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns data of transactions in a block. @@ -1864,3 +1894,60 @@ curl --request POST \ --header 'content-type: application/json' \ --data '{"jsonrpc": "2.0", "id": 1, "method": "zks_getRawBlockTransactions", "params": [ 140599 ]}' ``` + +### `zks_getConfirmedTokens` + +[source](src/zks.rs) + +Get list of the tokens supported by ZkSync Era. The tokens are returned in alphabetical order by their symbol. This means that the token id is its position in an alphabetically sorted array of tokens. + +#### Arguments + ++ `from: u32` - Offset of tokens ++ `limit: u8` - Limit of number of tokens to return + +#### Status + +`SUPPORTED` + +#### Example + +```bash +curl --request POST \ + --url http://localhost:8011/ \ + --header 'content-type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getConfirmedTokens", + "params": [0, 100] +}' +``` + +### `zks_getAllAccountBalances` + +[source](src/zks.rs) + +Get all known balances for a given account. + +#### Arguments + ++ `address: Address` - The user address with balances to check. + +#### Status + +`SUPPORTED` + +#### Example + +```bash +curl --request POST \ + --url http://localhost:8011/ \ + --header 'content-type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getAllAccountBalances", + "params": ["0x364d6D0333432C3Ac016Ca832fb8594A8cE43Ca6"] +}' +``` diff --git a/e2e-tests/contracts/ERC20.sol b/e2e-tests/contracts/ERC20.sol new file mode 100644 index 00000000..bd56500f --- /dev/null +++ b/e2e-tests/contracts/ERC20.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +/** + * @dev This contract is for basic demonstration purposes only. It should not be used in production. + * It is for the convenience of the ERC20FixedPaymaster.sol contract and its corresponding test file. + */ +contract MyERC20 is ERC20 { + uint8 private _decimals; + + constructor( + string memory name, + string memory symbol, + uint8 decimals_ + ) payable ERC20(name, symbol) { + _decimals = decimals_; + } + + function mint(address _to, uint256 _amount) public returns (bool) { + _mint(_to, _amount); + return true; + } + + function decimals() public view override returns (uint8) { + return _decimals; + } + + function burn(address from, uint256 amount) public { + _burn(from, amount); + } +} \ No newline at end of file diff --git a/e2e-tests/contracts/ERC20FixedPaymaster.sol b/e2e-tests/contracts/ERC20FixedPaymaster.sol new file mode 100644 index 00000000..67c4a938 --- /dev/null +++ b/e2e-tests/contracts/ERC20FixedPaymaster.sol @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import {IPaymaster, ExecutionResult, PAYMASTER_VALIDATION_SUCCESS_MAGIC} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymaster.sol"; +import {IPaymasterFlow} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymasterFlow.sol"; +import {TransactionHelper, Transaction} from "@matterlabs/zksync-contracts/l2/system-contracts/libraries/TransactionHelper.sol"; + +import "@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol"; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +/// @author Matter Labs +/// @notice This smart contract pays the gas fees for accounts with balance of a specific ERC20 token. It makes use of the approval-based flow paymaster. +contract ERC20FixedPaymaster is IPaymaster, Ownable { + uint256 constant PRICE_FOR_PAYING_FEES = 1; + + address public allowedToken; + + modifier onlyBootloader() { + require( + msg.sender == BOOTLOADER_FORMAL_ADDRESS, + "Only bootloader can call this method" + ); + // Continue execution if called from the bootloader. + _; + } + + constructor(address _erc20) { + allowedToken = _erc20; + } + + function validateAndPayForPaymasterTransaction( + bytes32, + bytes32, + Transaction calldata _transaction + ) + external + payable + onlyBootloader + returns (bytes4 magic, bytes memory context) + { + // By default we consider the transaction as accepted. + magic = PAYMASTER_VALIDATION_SUCCESS_MAGIC; + require( + _transaction.paymasterInput.length >= 4, + "The standard paymaster input must be at least 4 bytes long" + ); + + bytes4 paymasterInputSelector = bytes4( + _transaction.paymasterInput[0:4] + ); + if (paymasterInputSelector == IPaymasterFlow.approvalBased.selector) { + // While the transaction data consists of address, uint256 and bytes data, + // the data is not needed for this paymaster + (address token, uint256 amount, bytes memory data) = abi.decode( + _transaction.paymasterInput[4:], + (address, uint256, bytes) + ); + + // Verify if token is the correct one + require(token == allowedToken, "Invalid token"); + + // We verify that the user has provided enough allowance + address userAddress = address(uint160(_transaction.from)); + + address thisAddress = address(this); + + uint256 providedAllowance = IERC20(token).allowance( + userAddress, + thisAddress + ); + require( + providedAllowance >= PRICE_FOR_PAYING_FEES, + "Min allowance too low" + ); + + // Note, that while the minimal amount of ETH needed is tx.gasPrice * tx.gasLimit, + // neither paymaster nor account are allowed to access this context variable. + uint256 requiredETH = _transaction.gasLimit * + _transaction.maxFeePerGas; + + try + IERC20(token).transferFrom(userAddress, thisAddress, amount) + {} catch (bytes memory revertReason) { + // If the revert reason is empty or represented by just a function selector, + // we replace the error with a more user-friendly message + if (revertReason.length <= 4) { + revert("Failed to transferFrom from users' account"); + } else { + assembly { + revert(add(0x20, revertReason), mload(revertReason)) + } + } + } + + // The bootloader never returns any data, so it can safely be ignored here. + (bool success, ) = payable(BOOTLOADER_FORMAL_ADDRESS).call{ + value: requiredETH + }(""); + require( + success, + "Failed to transfer tx fee to the bootloader. Paymaster balance might not be enough." + ); + } else { + revert("Unsupported paymaster flow"); + } + } + + function postTransaction( + bytes calldata _context, + Transaction calldata _transaction, + bytes32, + bytes32, + ExecutionResult _txResult, + uint256 _maxRefundedGas + ) external payable override onlyBootloader { + } + + function withdraw(address _to) external onlyOwner { + // send paymaster funds to the owner + (bool success, ) = payable(_to).call{value: address(this).balance}(""); + require(success, "Failed to withdraw funds from paymaster."); + } + + receive() external payable {} + +} \ No newline at end of file diff --git a/e2e-tests/contracts/ERC721.sol b/e2e-tests/contracts/ERC721.sol new file mode 100644 index 00000000..2f352f6a --- /dev/null +++ b/e2e-tests/contracts/ERC721.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +// Importing OpenZeppelin's ERC721 Implementation +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +// Importing OpenZeppelin's Ownable contract to control ownership +import "@openzeppelin/contracts/access/Ownable.sol"; + +/** + * @dev This contract is for basic demonstration purposes only. It should not be used in production. + * It is for the convenience of the ERC721GatedPaymaster.sol contract and its corresponding test file. + */ +contract MyNFT is ERC721, Ownable { + // Maintains a counter of token IDs for uniqueness + uint256 public tokenCounter; + + // A constructor that gives my NFT a name and a symbol + constructor () ERC721 ("MyNFT", "MNFT"){ + // Initializes the tokenCounter to 0. Every new token has a unique ID starting from 1 + tokenCounter = 0; + } + + // Creates an NFT collection, with a unique token ID + function mint(address recipient) public onlyOwner returns (uint256) { + // Increases the tokenCounter by 1 and then mints the token with this new ID + _safeMint(recipient, tokenCounter); + + // Increments the token counter for the next token to be minted + tokenCounter = tokenCounter + 1; + + return tokenCounter; + } +} \ No newline at end of file diff --git a/e2e-tests/contracts/ERC721GatedPaymaster.sol b/e2e-tests/contracts/ERC721GatedPaymaster.sol new file mode 100644 index 00000000..b7b032fc --- /dev/null +++ b/e2e-tests/contracts/ERC721GatedPaymaster.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; + +import {IPaymaster, ExecutionResult, PAYMASTER_VALIDATION_SUCCESS_MAGIC} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymaster.sol"; +import {IPaymasterFlow} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymasterFlow.sol"; +import {TransactionHelper, Transaction} from "@matterlabs/zksync-contracts/l2/system-contracts/libraries/TransactionHelper.sol"; + +import "@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol"; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +/// @author Matter Labs +/// @notice This smart contract pays the gas fees on behalf of users that are the owner of a specific NFT asset +contract ERC721GatedPaymaster is IPaymaster, Ownable { + IERC721 private immutable nft_asset; + + modifier onlyBootloader() { + require( + msg.sender == BOOTLOADER_FORMAL_ADDRESS, + "Only bootloader can call this method" + ); + // Continue execution if called from the bootloader. + _; + } + + // The constructor takes the address of the ERC721 contract as an argument. + // The ERC721 contract is the asset that the user must hold in order to use the paymaster. + constructor(address _erc721) { + nft_asset = IERC721(_erc721); // Initialize the ERC721 contract + } + + // The gas fees will be paid for by the paymaster if the user is the owner of the required NFT asset. + function validateAndPayForPaymasterTransaction( + bytes32, + bytes32, + Transaction calldata _transaction + ) + external + payable + onlyBootloader + returns (bytes4 magic, bytes memory context) + { + // By default we consider the transaction as accepted. + magic = PAYMASTER_VALIDATION_SUCCESS_MAGIC; + require( + _transaction.paymasterInput.length >= 4, + "The standard paymaster input must be at least 4 bytes long" + ); + + bytes4 paymasterInputSelector = bytes4( + _transaction.paymasterInput[0:4] + ); + + // Use the general paymaster flow + if (paymasterInputSelector == IPaymasterFlow.general.selector) { + address userAddress = address(uint160(_transaction.from)); + // Verify if user has the required NFT asset in order to use paymaster + require( + nft_asset.balanceOf(userAddress) > 0, + "User does not hold the required NFT asset and therefore must for their own gas!" + ); + // Note, that while the minimal amount of ETH needed is tx.gasPrice * tx.gasLimit, + // neither paymaster nor account are allowed to access this context variable. + uint256 requiredETH = _transaction.gasLimit * + _transaction.maxFeePerGas; + + // The bootloader never returns any data, so it can safely be ignored here. + (bool success, ) = payable(BOOTLOADER_FORMAL_ADDRESS).call{ + value: requiredETH + }(""); + } else { + revert("Invalid paymaster flow"); + } + } + + function postTransaction( + bytes calldata _context, + Transaction calldata _transaction, + bytes32, + bytes32, + ExecutionResult _txResult, + uint256 _maxRefundedGas + ) external payable override onlyBootloader { + } + + function withdraw(address payable _to) external onlyOwner { + // send paymaster funds to the owner + uint256 balance = address(this).balance; + (bool success, ) = _to.call{value: balance}(""); + require(success, "Failed to withdraw funds from paymaster."); + } + + receive() external payable {} +} \ No newline at end of file diff --git a/e2e-tests/contracts/Greeter.sol b/e2e-tests/contracts/Greeter.sol index 252da0c4..abbbc8a7 100644 --- a/e2e-tests/contracts/Greeter.sol +++ b/e2e-tests/contracts/Greeter.sol @@ -16,7 +16,7 @@ contract Greeter is Ownable { return greeting; } - function setGreeting(string memory _greeting) public onlyOwner { + function setGreeting(string memory _greeting) public { console.log("setGreeting called"); console.log(_greeting); emit LogString(string.concat("Greeting is being updated to ", _greeting)); @@ -27,4 +27,11 @@ contract Greeter is Ownable { ); greeting = _greeting; } + + function setGreetingByOwner(string memory _greeting) public onlyOwner { + console.log("setGreetingByOwner called"); + console.log(_greeting); + emit LogString(string.concat("Greeting is being updated to ", _greeting)); + greeting = _greeting; + } } diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 1b88c87f..88ef6bee 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -10,6 +10,7 @@ "@matterlabs/hardhat-zksync-deploy": "^0.6.5", "@matterlabs/hardhat-zksync-solc": "^0.4.2", "@matterlabs/prettier-config": "^1.0.3", + "@matterlabs/zksync-contracts": "0.6.1", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^4.9.3", "@types/chai": "^4.3.4", diff --git a/e2e-tests/test/erc20-fixed-paymaster.test.ts b/e2e-tests/test/erc20-fixed-paymaster.test.ts new file mode 100644 index 00000000..6cbc3551 --- /dev/null +++ b/e2e-tests/test/erc20-fixed-paymaster.test.ts @@ -0,0 +1,115 @@ +import { expect } from "chai"; +import { Wallet, Provider, Contract, utils } from "zksync-web3"; +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import * as ethers from "ethers"; +import * as hre from "hardhat"; + +import { expectThrowsAsync, getTestProvider } from "../helpers/utils"; +import { RichAccounts } from "../helpers/constants"; + +describe("ERC20FixedPaymaster", function () { + let provider: Provider; + let richWallet: Wallet; + let deployer: Deployer; + let userWallet: Wallet; + let paymaster: Contract; + let greeter: Contract; + let token: Contract; + + before(async function () { + provider = getTestProvider(); + richWallet = new Wallet(RichAccounts[0].PrivateKey, provider); + deployer = new Deployer(hre, richWallet); + + // Setup new wallet + const emptyWallet = Wallet.createRandom(); + userWallet = new Wallet(emptyWallet.privateKey, provider); + + // Deploy ERC20 token, Paymaster, and Greeter + let artifact = await deployer.loadArtifact("MyERC20"); + token = await deployer.deploy(artifact, ["MyToken", "MyToken", 18]); + artifact = await deployer.loadArtifact("ERC20FixedPaymaster"); + paymaster = await deployer.deploy(artifact, [token.address]); + artifact = await deployer.loadArtifact("Greeter"); + greeter = await deployer.deploy(artifact, ["Hi"]); + + // Fund Paymaster + await provider.send("hardhat_setBalance", [paymaster.address, ethers.utils.parseEther("10")._hex]); + }); + + async function executeGreetingTransaction(user: Wallet, greeting: string) { + const gasPrice = await provider.getGasPrice(); + const token_address = token.address.toString(); + + const paymasterParams = utils.getPaymasterParams(paymaster.address, { + type: "ApprovalBased", + token: token_address, + minimalAllowance: ethers.BigNumber.from(1), + // empty bytes as testnet paymaster does not use innerInput + innerInput: new Uint8Array(), + }); + + // Estimate gasLimit via paymaster + const gasLimit = await greeter.connect(user).estimateGas.setGreeting(greeting, { + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams, + }, + }); + + const setGreetingTx = await greeter.connect(user).setGreeting(greeting, { + maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxFeePerGas: gasPrice, + gasLimit, + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams, + }, + }); + + await setGreetingTx.wait(); + } + + it("user with MyERC20 token can update message for free", async function () { + // Arrange + const initialMintAmount = ethers.utils.parseEther("3"); + const success = await token.mint(userWallet.address, initialMintAmount); + await success.wait(); + + const userInitialTokenBalance = await token.balanceOf(userWallet.address); + const userInitialETHBalance = await userWallet.getBalance(); + const initialPaymasterBalance = await provider.getBalance(paymaster.address); + + // Act + await executeGreetingTransaction(userWallet, "Hola, mundo!"); + + // Assert + const finalETHBalance = await userWallet.getBalance(); + const finalUserTokenBalance = await token.balanceOf(userWallet.address); + const finalPaymasterBalance = await provider.getBalance(paymaster.address); + + expect(await greeter.greet()).to.equal("Hola, mundo!"); + expect(initialPaymasterBalance.gt(finalPaymasterBalance)).to.be.true; + expect(userInitialETHBalance).to.eql(finalETHBalance); + expect(userInitialTokenBalance.gt(finalUserTokenBalance)).to.be.true; + }); + + it("should allow owner to withdraw all funds", async function () { + // Arrange + // Act + const tx = await paymaster.connect(richWallet).withdraw(userWallet.address); + await tx.wait(); + + // Assert + const finalContractBalance = await provider.getBalance(paymaster.address); + expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + }); + + it("should prevent non-owners from withdrawing funds", async function () { + const action = async () => { + await paymaster.connect(userWallet).withdraw(userWallet.address); + }; + + await expectThrowsAsync(action, "Ownable: caller is not the owner"); + }); +}); diff --git a/e2e-tests/test/erc721-gated-paymaster.test.ts b/e2e-tests/test/erc721-gated-paymaster.test.ts new file mode 100644 index 00000000..3229136b --- /dev/null +++ b/e2e-tests/test/erc721-gated-paymaster.test.ts @@ -0,0 +1,118 @@ +import { expect } from "chai"; +import { Wallet, Provider, Contract, utils } from "zksync-web3"; +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import * as ethers from "ethers"; +import * as hre from "hardhat"; + +import { expectThrowsAsync, getTestProvider } from "../helpers/utils"; +import { RichAccounts } from "../helpers/constants"; + +describe("ERC721GatedPaymaster", function () { + let provider: Provider; + let wallet: Wallet; + let deployer: Deployer; + let nftUserWallet: Wallet; + let paymaster: Contract; + let greeter: Contract; + let erc721: Contract; + + before(async function () { + provider = getTestProvider(); + wallet = new Wallet(RichAccounts[0].PrivateKey, provider); + deployer = new Deployer(hre, wallet); + + // Setup new wallets + nftUserWallet = Wallet.createRandom(); + nftUserWallet = new Wallet(nftUserWallet.privateKey, provider); + + // Deploy NFT and Paymaster + let artifact = await deployer.loadArtifact("MyNFT"); + erc721 = await deployer.deploy(artifact, []); + artifact = await deployer.loadArtifact("ERC721GatedPaymaster"); + paymaster = await deployer.deploy(artifact, [erc721.address]); + artifact = await deployer.loadArtifact("Greeter"); + greeter = await deployer.deploy(artifact, ["Hi"]); + + // Fund Paymaster + await provider.send("hardhat_setBalance", [paymaster.address, ethers.utils.parseEther("10")._hex]); + + // Assign NFT to nftUserWallet + const tx = await erc721.mint(nftUserWallet.address); + await tx.wait(); + }); + + async function executeGreetingTransaction(user: Wallet, greeting: string) { + const gasPrice = await provider.getGasPrice(); + const paymasterParams = utils.getPaymasterParams(paymaster.address, { + type: "General", + // empty bytes as paymaster does not use innerInput + innerInput: new Uint8Array(), + }); + + // estimate gasLimit via paymaster + const gasLimit = await greeter.connect(user).estimateGas.setGreeting(greeting, { + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams: paymasterParams, + }, + }); + + const setGreetingTx = await greeter.connect(user).setGreeting(greeting, { + maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxFeePerGas: gasPrice, + gasLimit, + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams, + }, + }); + + await setGreetingTx.wait(); + } + + it("should not pay for gas fees when user has NFT", async function () { + // Arrange + const initialBalance = await nftUserWallet.getBalance(); + + // Act + await executeGreetingTransaction(nftUserWallet, "Hello World"); + + // Assert + expect(await greeter.greet()).to.equal("Hello World"); + const newBalance = await nftUserWallet.getBalance(); + expect(newBalance).to.eql(initialBalance); + }); + + it("should require the user to have the NFT", async function () { + // Arrange + let normalUserWallet = Wallet.createRandom(); + normalUserWallet = new Wallet(normalUserWallet.privateKey, provider); + + // Act + const action = async () => { + await executeGreetingTransaction(normalUserWallet, "Hello World"); + }; + + // Assert + await expectThrowsAsync(action, "User does not hold the required NFT asset and therefore must for their own gas!"); + }); + + it("should allow owner to withdraw all funds", async function () { + // Arrange + // Act + const tx = await paymaster.connect(wallet).withdraw(nftUserWallet.address); + await tx.wait(); + + // Assert + const finalContractBalance = await provider.getBalance(paymaster.address); + expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + }); + + it("should prevent non-owners from withdrawing funds", async function () { + const action = async () => { + await paymaster.connect(nftUserWallet).withdraw(nftUserWallet.address); + }; + + await expectThrowsAsync(action, "Ownable: caller is not the owner"); + }); +}); diff --git a/e2e-tests/test/evm-apis.test.ts b/e2e-tests/test/evm-apis.test.ts index 17d6d950..5bdd8d70 100644 --- a/e2e-tests/test/evm-apis.test.ts +++ b/e2e-tests/test/evm-apis.test.ts @@ -102,13 +102,12 @@ describe("evm_snapshot", function () { expect(await greeter.greet()).to.eq("Hi"); // Act - const snapshotId1 = await provider.send("evm_snapshot", []); - const snapshotId2 = await provider.send("evm_snapshot", []); + const snapshotId1: string = await provider.send("evm_snapshot", []); + const snapshotId2: string = await provider.send("evm_snapshot", []); // Assert expect(await greeter.greet()).to.eq("Hi"); - expect(BigNumber.from(snapshotId1).toString()).to.eq("1"); - expect(BigNumber.from(snapshotId2).toString()).to.eq("2"); + expect(BigNumber.from(snapshotId2).toString()).to.eq(BigNumber.from(snapshotId1).add(1).toString()); }); }); diff --git a/e2e-tests/test/main.test.ts b/e2e-tests/test/main.test.ts index d2412dff..0aaf0a12 100644 --- a/e2e-tests/test/main.test.ts +++ b/e2e-tests/test/main.test.ts @@ -42,7 +42,7 @@ describe("Greeter Smart Contract", function () { const greeter = await deployer.deploy(artifact, ["Hello, world!"]); // should revert - const tx = await greeter.connect(userWallet).setGreeting("Hola, mundo!"); + const tx = await greeter.connect(userWallet).setGreetingByOwner("Hola, mundo!"); await tx.wait(); }; @@ -99,6 +99,7 @@ describe("Greeter Smart Contract", function () { expect(filterChanges.length).to.eq(1); expect(filterChanges[0].transactionHash).to.eq(receipt.transactionHash); expect(filterChanges[0].blockHash).to.eq(receipt.blockHash); + expect(filterChanges[0].removed).to.eq(false); const eventInterface = new ethers.utils.Interface(["event LogString(string value)"]); expect(eventInterface.parseLog(filterChanges[0]).args[0]).to.equal("Greeting is being updated to Darth Vader"); }); diff --git a/e2e-tests/test/web3-apis.test.ts b/e2e-tests/test/web3-apis.test.ts new file mode 100644 index 00000000..a17ad1d0 --- /dev/null +++ b/e2e-tests/test/web3-apis.test.ts @@ -0,0 +1,17 @@ +import { expect } from "chai"; +import { getTestProvider } from "../helpers/utils"; + +const provider = getTestProvider(); + +describe("web3_clientVersion", function () { + it("Should return zkSync/v2.0", async function () { + // Arrange + const expectedClientVersion = "zkSync/v2.0"; + + // Act + const response: string = await provider.send("web3_clientVersion", []); + + // Assert + expect(response).to.equal(expectedClientVersion); + }); +}); diff --git a/e2e-tests/test/zks-apis.test.ts b/e2e-tests/test/zks-apis.test.ts index dde269d5..01cd989e 100644 --- a/e2e-tests/test/zks-apis.test.ts +++ b/e2e-tests/test/zks-apis.test.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import { deployContract, getTestProvider } from "../helpers/utils"; import { Wallet } from "zksync-web3"; import { RichAccounts } from "../helpers/constants"; -import { ethers } from "ethers"; +import { BigNumber, ethers } from "ethers"; import * as hre from "hardhat"; import { TransactionRequest } from "zksync-web3/build/src/types"; import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; @@ -31,7 +31,7 @@ describe("zks_estimateFee", function () { const response: Fee = await provider.send("zks_estimateFee", [transaction]); // Assert - expect(ethers.BigNumber.from(response.gas_limit)).to.eql(ethers.BigNumber.from("1231992"), "Unexpected gas_limit"); + expect(ethers.BigNumber.from(response.gas_limit)).to.eql(ethers.BigNumber.from("1230957"), "Unexpected gas_limit"); expect(ethers.BigNumber.from(response.gas_per_pubdata_limit)).to.eql( ethers.BigNumber.from("4080"), "Unexpected gas_per_pubdata_limit" @@ -152,3 +152,28 @@ describe("zks_getRawBlockTransactions", function () { expect(txns[0]["execute"]["calldata"]).to.equal(receipt.data); }); }); + +describe("zks_getConfirmedTokens", function () { + it("Should return only Ether", async function () { + const tokens = await provider.send("zks_getConfirmedTokens", [0, 100]); + expect(tokens.length).to.equal(1); + expect(tokens[0].name).to.equal("Ether"); + }); +}); + +describe("zks_getAllAccountBalances", function () { + it("Should return balance of a rich account", async function () { + // Arrange + const account = RichAccounts[0].Account; + const expectedBalance = ethers.utils.parseEther("1000000000000"); // 1_000_000_000_000 ETH + const ethAddress = "0x000000000000000000000000000000000000800a"; + await provider.send("hardhat_setBalance", [account, expectedBalance._hex]); + + // Act + const balances = await provider.send("zks_getAllAccountBalances", [account]); + const ethBalance = BigNumber.from(balances[ethAddress]); + + // Assert + expect(ethBalance.eq(expectedBalance)).to.be.true; + }); +}); diff --git a/e2e-tests/yarn.lock b/e2e-tests/yarn.lock index b417312f..2fe3c168 100644 --- a/e2e-tests/yarn.lock +++ b/e2e-tests/yarn.lock @@ -507,6 +507,11 @@ resolved "https://registry.yarnpkg.com/@matterlabs/prettier-config/-/prettier-config-1.0.3.tgz#3e2eb559c0112bbe9671895f935700dad2a15d38" integrity sha512-JW7nHREPqEtjBWz3EfxLarkmJBD8vi7Kx/1AQ6eBZnz12eHc1VkOyrc6mpR5ogTf0dOUNXFAfZut+cDe2dn4kQ== +"@matterlabs/zksync-contracts@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@matterlabs/zksync-contracts/-/zksync-contracts-0.6.1.tgz#39f061959d5890fd0043a2f1ae710f764b172230" + integrity sha512-+hucLw4DhGmTmQlXOTEtpboYCaOm/X2VJcWmnW4abNcOgQXEHX+mTxQrxEfPjIZT0ZE6z5FTUrOK9+RgUZwBMQ== + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" diff --git a/etc/system-contracts/SystemConfig.json b/etc/system-contracts/SystemConfig.json index 973e0dc0..827e11b5 100644 --- a/etc/system-contracts/SystemConfig.json +++ b/etc/system-contracts/SystemConfig.json @@ -9,9 +9,9 @@ "L1_TX_INTRINSIC_L2_GAS": 167157, "L1_TX_INTRINSIC_PUBDATA": 88, "MAX_GAS_PER_TRANSACTION": 80000000, - "BOOTLOADER_MEMORY_FOR_TXS": 273132, + "BOOTLOADER_MEMORY_FOR_TXS": 8740224, "REFUND_GAS": 7343, "KECCAK_ROUND_COST_GAS": 40, "SHA256_ROUND_COST_GAS": 7, "ECRECOVER_COST_GAS": 1112 -} \ No newline at end of file +} diff --git a/etc/system-contracts/VERSION.md b/etc/system-contracts/VERSION.md new file mode 100644 index 00000000..d8e0e48b --- /dev/null +++ b/etc/system-contracts/VERSION.md @@ -0,0 +1,17 @@ +This directory was copied from https://github.com/matter-labs/era-system-contracts +The current commit: `a00ab9a11643f3a918ed95cdf8a04edff5499d92` +The following directories/files were copied: +- [bootloader](bootloader) +- [contracts](contracts) +- [scripts](scripts) +- [hardhat.config.ts](hardhat.config.ts) +- [package.json](package.json) +- [SystemConfig.json](SystemConfig.json) +- [yarn.lock](yarn.lock) + +The next changes were introduced: +- [bootloader.yul](bootloader%2Fbootloader.yul) + - Debug data, marked as `DEBUG SUPPORT` blocks. + - Impersonating preprocessing mode, blocks `` and at some places added `` condition. +- [process.ts](scripts%2Fprocess.ts) + - Impersonating preprocessing mode, "For impersonating" blocks. diff --git a/etc/system-contracts/bootloader/bootloader.yul b/etc/system-contracts/bootloader/bootloader.yul index 472bf5d8..3e55ea37 100644 --- a/etc/system-contracts/bootloader/bootloader.yul +++ b/etc/system-contracts/bootloader/bootloader.yul @@ -3,6 +3,8 @@ object "Bootloader" { } object "Bootloader_deployed" { code { + {{CODE_START_PLACEHOLDER}} + //////////////////////////////////////////////////////////////////////////// // Function Declarations //////////////////////////////////////////////////////////////////////////// @@ -36,8 +38,8 @@ object "Bootloader" { function getBaseFee(l1GasPrice, fairL2GasPrice) -> baseFee, gasPricePerPubdata { // By default, we want to provide the fair L2 gas price. // That it means that the operator controls - // what the value of the baseFee will be. In the future, - // a better system, aided by EIP1559 should be added. + // what the value of the baseFee will be. In the future, + // a better system, aided by EIP1559 should be added. let pubdataBytePriceETH := safeMul(l1GasPrice, L1_GAS_PER_PUBDATA_BYTE(), "aoa") @@ -48,20 +50,20 @@ object "Bootloader" { gasPricePerPubdata := ceilDiv(pubdataBytePriceETH, baseFee) } - /// @dev It should be always possible to submit a transaction + /// @dev It should be always possible to submit a transaction /// that consumes such amount of public data. function GUARANTEED_PUBDATA_PER_TX() -> ret { ret := {{GUARANTEED_PUBDATA_BYTES}} } - /// @dev The maximal gasPerPubdata, which allows users to still be + /// @dev The maximal gasPerPubdata, which allows users to still be /// able to send `GUARANTEED_PUBDATA_PER_TX` onchain. function MAX_L2_GAS_PER_PUBDATA() -> ret { ret := div(MAX_GAS_PER_TRANSACTION(), GUARANTEED_PUBDATA_PER_TX()) } /// @dev The computational overhead for a batch. - /// It includes the combined price for 1 instance of all the circuits + /// It includes the combined price for 1 instance of all the circuits /// (since they might be partially filled), the price for running /// the common parts of the bootloader as well as general maintainance of the system. function BATCH_OVERHEAD_L2_GAS() -> ret { @@ -69,7 +71,7 @@ object "Bootloader" { } /// @dev The overhead for the interaction with L1. - /// It should cover proof verification as well as other minor + /// It should cover proof verification as well as other minor /// overheads for committing/executing a transaction in a batch. function BATCH_OVERHEAD_L1_GAS() -> ret { ret := {{BATCH_OVERHEAD_L1_GAS}} @@ -81,7 +83,7 @@ object "Bootloader" { } /// @dev The number of L1 gas needed to be spent for - /// L1 byte. While a single pubdata byte costs `16` gas, + /// L1 byte. While a single pubdata byte costs `16` gas, /// we demand at least 17 to cover up for the costs of additional /// hashing of it, etc. function L1_GAS_PER_PUBDATA_BYTE() -> ret { @@ -99,7 +101,7 @@ object "Bootloader" { function FORBID_ZERO_GAS_PER_PUBDATA() -> ret { ret := {{FORBID_ZERO_GAS_PER_PUBDATA}} } - + /// @dev The maximum number of transactions per L1 batch. function MAX_TRANSACTIONS_IN_BATCH() -> ret { ret := {{MAX_TRANSACTIONS_IN_BATCH}} @@ -117,20 +119,20 @@ object "Bootloader" { ret := mul(SCRATCH_SPACE_BEGIN_SLOT(), 32) } - /// @dev The first 32 slots are reserved for event emitting for the + /// @dev The first 32 slots are reserved for event emitting for the /// debugging purposes function SCRATCH_SPACE_SLOTS() -> ret { ret := 32 } /// @dev Slots reserved for saving the paymaster context - /// @dev The paymasters are allowed to consume at most + /// @dev The paymasters are allowed to consume at most /// 32 slots (1024 bytes) for their context. /// The 33 slots are required since the first one stores the length of the calldata. function PAYMASTER_CONTEXT_SLOTS() -> ret { ret := 33 } - + /// @dev Bytes reserved for saving the paymaster context function PAYMASTER_CONTEXT_BYTES() -> ret { ret := mul(PAYMASTER_CONTEXT_SLOTS(), 32) @@ -146,7 +148,7 @@ object "Bootloader" { ret := mul(PAYMASTER_CONTEXT_BEGIN_SLOT(), 32) } - /// @dev Each tx must have at least this amount of unused bytes before them to be able to + /// @dev Each tx must have at least this amount of unused bytes before them to be able to /// encode the postOp operation correctly. function MAX_POSTOP_SLOTS() -> ret { // Before the actual transaction encoding, the postOp contains 6 slots: @@ -180,7 +182,7 @@ object "Bootloader" { ret := 32 } - /// @dev Besides the factory deps themselves, we also need another 4 slots for: + /// @dev Besides the factory deps themselves, we also need another 4 slots for: /// selector, marker of whether the user should pay for the pubdata, /// the offset for the encoding of the array as well as the length of the array. function NEW_FACTORY_DEPS_RESERVED_SLOTS() -> ret { @@ -237,7 +239,7 @@ object "Bootloader" { } /// @dev byte starting from which the maximum number of gas that the operator "trusts" - /// the transaction to use for its execution is stored. + /// the transaction to use for its execution is stored. function TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_BYTE() -> ret { ret := mul(TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT(), 32) } @@ -273,8 +275,8 @@ object "Bootloader" { } /// @dev The number of slots dedicated for the L2 block information for the transactions. - /// Note, that an additional slot is required for the fictive L2 block at the end of the batch. - /// For technical reasons inside the sequencer implementation, + /// Note, that an additional slot is required for the fictive L2 block at the end of the batch. + /// For technical reasons inside the sequencer implementation, /// each batch ends with a fictive block with no transactions. function TX_OPERATOR_L2_BLOCK_INFO_SLOTS() -> ret { ret := mul(add(MAX_TRANSACTIONS_IN_BATCH(), 1), TX_OPERATOR_L2_BLOCK_INFO_SLOT_SIZE()) @@ -284,11 +286,11 @@ object "Bootloader" { /// Each compressed bytecode is provided in the following format: /// - 32 byte formatted bytecode hash /// - 32 byte of zero (it will be replaced within the code with left-padded selector of the `publishCompressedBytecode`). - /// - ABI-encoding of the parameters of the `publishCompressedBytecode` method. - /// + /// - ABI-encoding of the parameters of the `publishCompressedBytecode` method. + /// /// At the slot `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT()` the pointer to the currently processed compressed bytecode /// is stored, i.e. this pointer will be increased once the current bytecode which the pointer points to is published. - /// At the start of the bootloader, the value stored at the `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT` is equal to + /// At the start of the bootloader, the value stored at the `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT` is equal to /// `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT + 32`, where the hash of the first compressed bytecode to publish should be stored. function COMPRESSED_BYTECODES_BEGIN_SLOT() -> ret { ret := add(TX_OPERATOR_L2_BLOCK_INFO_BEGIN_SLOT(), TX_OPERATOR_L2_BLOCK_INFO_SLOTS()) @@ -340,7 +342,7 @@ object "Bootloader" { } /// @dev Slots needed to store L1 Messenger pubdata. - /// @dev Note that are many more these than the maximal pubdata in batch, since + /// @dev Note that are many more these than the maximal pubdata in batch, since /// it needs to also accomodate uncompressed state diffs that are required for the state diff /// compression verification. function OPERATOR_PROVIDED_L1_MESSENGER_PUBDATA_SLOTS() -> ret { @@ -363,7 +365,7 @@ object "Bootloader" { } // Each tx description has the following structure - // + // // struct BootloaderTxDescription { // uint256 txMeta; // uint256 txDataOffset; @@ -375,7 +377,7 @@ object "Bootloader" { // 0 byte: `execute`, bool. Denotes whether transaction should be executed by the bootloader. // 31 byte: server-side tx execution mode // For proved batches: - // It can simply denotes whether to execute the transaction (0 to stop executing the batch, 1 to continue) + // It can simply denotes whether to execute the transaction (0 to stop executing the batch, 1 to continue) // // Each such encoded struct consumes 2 words function TX_DESCRIPTION_SIZE() -> ret { @@ -388,9 +390,9 @@ object "Bootloader" { } /// @dev The memory page consists of 2^19 VM words. - /// Each execution result is a single boolean, but + /// Each execution result is a single boolean, but /// for the sake of simplicity we will spend 32 bytes on each - /// of those for now. + /// of those for now. function MAX_MEM_SIZE() -> ret { ret := 0x1000000 // 2^24 bytes } @@ -481,7 +483,7 @@ object "Bootloader" { function CONTRACT_DEPLOYER_ADDR() -> ret { ret := 0x0000000000000000000000000000000000008006 } - + function FORCE_DEPLOYER() -> ret { ret := 0x0000000000000000000000000000000000008007 } @@ -511,7 +513,7 @@ object "Bootloader" { } /// @dev The minimal allowed distance in bytes between the pointer to the compressed data - /// and the end of the area dedicated for the compressed bytecodes. + /// and the end of the area dedicated for the compressed bytecodes. /// In fact, only distance of 192 should be sufficient: there it would be possible to insert /// the hash of the bytecode, the 32 bytes buffer for selector and 2 offsets of the calldata, /// but we keep it at 512 just in case. @@ -520,7 +522,7 @@ object "Bootloader" { } /// @dev Whether the bootloader should enforce that accounts have returned the correct - /// magic value for signature. This value is enforced to be "true" on the main proved batch, but + /// magic value for signature. This value is enforced to be "true" on the main proved batch, but /// we need the ability to ignore invalid signature results during fee estimation, /// where the signature for the transaction is usually not known beforehand. function SHOULD_ENSURE_CORRECT_RETURNED_MAGIC() -> ret { @@ -537,7 +539,7 @@ object "Bootloader" { ret := 255 } - /// @dev The overhead in gas that will be used when checking whether the context has enough gas, i.e. + /// @dev The overhead in gas that will be used when checking whether the context has enough gas, i.e. /// when checking for X gas, the context should have at least X+CHECK_ENOUGH_GAS_OVERHEAD() gas. function CHECK_ENOUGH_GAS_OVERHEAD() -> ret { ret := 1000000 @@ -554,7 +556,7 @@ object "Bootloader" { ret := 0 } } - + /// @dev Calculates the length of a given number of bytes rounded up to the nearest multiple of 32. function lengthRoundedByWords(len) -> ret { let neededWords := div(add(len, 31), 32) @@ -565,11 +567,11 @@ object "Bootloader" { /// @param txDataOffset The offset to the ABI-encoding of the structure /// @param resultPtr The pointer at which the result of the transaction's execution should be stored /// @param transactionIndex The index of the transaction in the batch - /// @param isETHCall Whether the call is an ethCall. - /// @param gasPerPubdata The number of L2 gas to charge users for each byte of pubdata + /// @param isETHCall Whether the call is an ethCall. + /// @param gasPerPubdata The number of L2 gas to charge users for each byte of pubdata /// On proved batch this value should always be zero function processTx( - txDataOffset, + txDataOffset, resultPtr, transactionIndex, isETHCall, @@ -588,20 +590,20 @@ object "Bootloader" { debugLog("gasPerPubdata:", gasPerPubdata) - switch getTxType(innerTxDataOffset) + switch getTxType(innerTxDataOffset) case 254 { // This is an upgrade transaction. // Protocol upgrade transactions are processed totally in the same manner as the normal L1->L2 transactions, // the only difference are: // - They must be the first one in the batch - // - They have a different type to prevent tx hash collisions and preserve the expectation that the + // - They have a different type to prevent tx hash collisions and preserve the expectation that the // L1->L2 transactions have priorityTxId inside them. - if transactionIndex { + if transactionIndex { assertionError("Protocol upgrade tx not first") } // This is to be called in the event that the L1 Transaction is a protocol upgrade txn. - // Since this is upgrade transactions, we are okay that the gasUsed by the transaction will + // Since this is upgrade transactions, we are okay that the gasUsed by the transaction will // not cover this additional hash computation let canonicalL1TxHash := getCanonicalL1TxHash(txDataOffset) sendToL1Native(true, protocolUpgradeTxHashKey(), canonicalL1TxHash) @@ -617,7 +619,7 @@ object "Bootloader" { if lt(userProvidedPubdataPrice, gasPerPubdata) { revertWithReason(UNACCEPTABLE_GAS_PRICE_ERR_CODE(), 0) } - + setPricePerPubdataByte(gasPerPubdata) @@ -625,7 +627,7 @@ object "Bootloader" { - switch isETHCall + switch isETHCall case 1 { let gasLimit := getGasLimit(innerTxDataOffset) let nearCallAbi := getNearCallABI(gasLimit) @@ -645,17 +647,47 @@ object "Bootloader" { resultPtr ) } - default { + default { processL2Tx(txDataOffset, resultPtr, transactionIndex, gasPerPubdata) } } } + /// @dev Checks whether the code hash of the system context contract is correct and updates it if needed. + /// @dev The L1 contracts expect all the system logs to be present in the first boojum upgrade batch already. + /// However, the old system context did not send the same system logs. Usually we upgrade system context + /// via an upgrade transaction, but in this case the transaction won't be even processed, because of failure to create an L2 block. + function upgradeSystemContextIfNeeded() { + let expectedCodeHash := {{SYSTEM_CONTEXT_EXPECTED_CODE_HASH}} + + let actualCodeHash := extcodehash(SYSTEM_CONTEXT_ADDR()) + if iszero(eq(expectedCodeHash, actualCodeHash)) { + // Preparing the calldata to upgrade the SystemContext contract + {{UPGRADE_SYSTEM_CONTEXT_CALLDATA}} + + // We'll use a mimicCall to simulate the correct sender. + let success := mimicCallOnlyResult( + CONTRACT_DEPLOYER_ADDR(), + FORCE_DEPLOYER(), + 0, + 0, + 0, + 0, + 0, + 0 + ) + + if iszero(success) { + assertionError("system context upgrade fail") + } + } + } + /// @dev Calculates the canonical hash of the L1->L2 transaction that will be /// sent to L1 as a message to the L1 contract that a certain operation has been processed. function getCanonicalL1TxHash(txDataOffset) -> ret { - // Putting the correct value at the `txDataOffset` just in case, since + // Putting the correct value at the `txDataOffset` just in case, since // the correctness of this value is not part of the system invariants. // Note, that the correct ABI encoding of the Transaction structure starts with 0x20 mstore(txDataOffset, 32) @@ -670,7 +702,7 @@ object "Bootloader" { } /// @dev The purpose of this function is to make sure that the operator - /// gets paid for the transaction. Note, that the beneficiary of the payment is + /// gets paid for the transaction. Note, that the beneficiary of the payment is /// bootloader. /// The operator will be paid at the end of the batch. function ensurePayment(txDataOffset, gasPrice) { @@ -701,10 +733,10 @@ object "Bootloader" { 1 ) } - } + } default { // There is some paymaster present. - payer := paymaster + payer := paymaster // Firstly, the `prepareForPaymaster` method of the user's account is called. setHook(VM_HOOK_ACCOUNT_VALIDATION_ENTERED()) @@ -735,7 +767,7 @@ object "Bootloader" { let bootloaderReceivedFunds := safeSub(balance(BOOTLOADER_FORMAL_ADDR()), bootloaderBalanceETH, "qsx") // If the amount of funds provided to the bootloader is less than the minimum required one - // then this transaction should be rejected. + // then this transaction should be rejected. if lt(bootloaderReceivedFunds, requiredETH) { revertWithReason( FAILED_TO_CHARGE_FEE_ERR_CODE(), @@ -743,7 +775,7 @@ object "Bootloader" { ) } - let excessiveFunds := safeSub(bootloaderReceivedFunds, requiredETH, "llm") + let excessiveFunds := safeSub(bootloaderReceivedFunds, requiredETH, "llm") if gt(excessiveFunds, 0) { // Returning back the excessive funds taken. @@ -752,7 +784,7 @@ object "Bootloader" { } /// @notice Mints ether to the recipient - /// @param to -- the address of the recipient + /// @param to -- the address of the recipient /// @param amount -- the amount of ETH to mint /// @param useNearCallPanic -- whether to use nearCallPanic in case of /// the transaction failing to execute. It is desirable in cases @@ -771,7 +803,7 @@ object "Bootloader" { 0 ) if iszero(success) { - switch useNearCallPanic + switch useNearCallPanic case 0 { revertWithReason( MINT_ETHER_FAILED_ERR_CODE(), @@ -784,9 +816,9 @@ object "Bootloader" { } } - /// @dev Saves the paymaster context and checks that the paymaster has returned the correct + /// @dev Saves the paymaster context and checks that the paymaster has returned the correct /// magic value. - /// @dev IMPORTANT: this method should be called right after + /// @dev IMPORTANT: this method should be called right after /// the validateAndPayForPaymasterTransaction method to keep the `returndata` from that transaction function storePaymasterContextAndCheckMagic() { // The paymaster validation step should return context of type "bytes context" @@ -803,7 +835,7 @@ object "Bootloader" { // Note that it is important to copy the magic even though it is not needed if the // `SHOULD_ENSURE_CORRECT_RETURNED_MAGIC` is false. It is never false in production - // but it is so in fee estimation and we want to preserve as many operations as + // but it is so in fee estimation and we want to preserve as many operations as // in the original operation. { returndatacopy(0, 0, 32) @@ -887,8 +919,8 @@ object "Bootloader" { gasPerPubdata, isPriorityOp ) { - // For L1->L2 transactions we always use the pubdata price provided by the transaction. - // This is needed to ensure DDoS protection. All the excess expenditure + // For L1->L2 transactions we always use the pubdata price provided by the transaction. + // This is needed to ensure DDoS protection. All the excess expenditure // will be refunded to the user. setPricePerPubdataByte(gasPerPubdata) @@ -896,10 +928,10 @@ object "Bootloader" { let innerTxDataOffset := add(txDataOffset, 32) let gasLimitForTx, reservedGas := getGasLimitForTx( - innerTxDataOffset, - transactionIndex, - gasPerPubdata, - L1_TX_INTRINSIC_L2_GAS(), + innerTxDataOffset, + transactionIndex, + gasPerPubdata, + L1_TX_INTRINSIC_L2_GAS(), L1_TX_INTRINSIC_PUBDATA() ) @@ -915,7 +947,7 @@ object "Bootloader" { // for the transaction must be enforced on L1, but we double check it here let gasLimit := getGasLimit(innerTxDataOffset) - // Note, that for now the property of block.base <= tx.maxFeePerGas does not work + // Note, that for now the property of block.base <= tx.maxFeePerGas does not work // for L1->L2 transactions. For now, these transactions are processed with the same gasPrice // they were provided on L1. In the future, we may apply a new logic for it. let gasPrice := getMaxFeePerGas(innerTxDataOffset) @@ -924,7 +956,7 @@ object "Bootloader" { if lt(getReserved0(innerTxDataOffset), safeAdd(value, txInternalCost, "ol")) { assertionError("deposited eth too low") } - + if gt(gasLimitForTx, gasUsedOnPreparation) { let potentialRefund := 0 @@ -935,11 +967,9 @@ object "Bootloader" { // In case the operator provided smaller refund than the one calculated // by the bootloader, we return the refund calculated by the bootloader. - refundGas := max(getOperatorRefundForTx(transactionIndex), potentialRefund) + refundGas := max(getOperatorRefundForTx(transactionIndex), safeAdd(potentialRefund, reservedGas, "iop")) } - refundGas := add(refundGas, reservedGas) - if gt(refundGas, gasLimit) { assertionError("L1: refundGas > gasLimit") } @@ -948,7 +978,7 @@ object "Bootloader" { // Note, that for now, the L1->L2 transactions are free, i.e. the gasPrice // for such transactions is always zero, so the `refundGas` is not used anywhere - // except for notifications for the operator for API purposes. + // except for notifications for the operator for API purposes. notifyAboutRefund(refundGas) // Paying the fee to the operator @@ -957,14 +987,18 @@ object "Bootloader" { let toRefundRecipient switch success case 0 { + if iszero(isPriorityOp) { + // Upgrade transactions must always succeed + assertionError("Upgrade tx failed") + } + // If the transaction reverts, then minting the msg.value to the user has been reverted - // as well, so we can simply mint everything that the user has deposited to + // as well, so we can simply mint everything that the user has deposited to // the refund recipient - toRefundRecipient := safeSub(getReserved0(innerTxDataOffset), payToOperator, "vji") } default { - // If the transaction succeeds, then it is assumed that msg.value was transferred correctly. However, the remaining + // If the transaction succeeds, then it is assumed that msg.value was transferred correctly. However, the remaining // ETH deposited will be given to the refund recipient. toRefundRecipient := safeSub(getReserved0(innerTxDataOffset), safeAdd(getValue(innerTxDataOffset), payToOperator, "kpa"), "ysl") @@ -976,10 +1010,10 @@ object "Bootloader" { // In case of an issue in L1 contracts, we still will be able to process tx. refundRecipient := and(refundRecipient, sub(shl(160, 1), 1)) mintEther(refundRecipient, toRefundRecipient, false) - } + } mstore(resultPtr, success) - + debugLog("Send message to L1", success) // Sending the L2->L1 log so users will be able to prove transaction execution result on L1. @@ -991,7 +1025,7 @@ object "Bootloader" { mstore(32, canonicalL1TxHash) mstore(PRIORITY_TXS_L1_DATA_BEGIN_BYTE(), keccak256(0, 64)) mstore(add(PRIORITY_TXS_L1_DATA_BEGIN_BYTE(), 32), add(mload(add(PRIORITY_TXS_L1_DATA_BEGIN_BYTE(), 32)), 1)) - } + } } function getExecuteL1TxAndGetRefund(txDataOffset, gasForExecution) -> potentialRefund, success { @@ -1022,7 +1056,7 @@ object "Bootloader" { /// @return gasUsedOnPreparation The number of L2 gas used in the preparation stage function l1TxPreparation(txDataOffset) -> canonicalL1TxHash, gasUsedOnPreparation { let innerTxDataOffset := add(txDataOffset, 32) - + let gasBeforePreparation := gas() debugLog("gasBeforePreparation", gasBeforePreparation) @@ -1040,12 +1074,12 @@ object "Bootloader" { debugLog("gasUsedOnPreparation", gasUsedOnPreparation) } - /// @dev Returns the gas price that should be used by the transaction + /// @dev Returns the gas price that should be used by the transaction /// based on the EIP1559's maxFeePerGas and maxPriorityFeePerGas. /// The following invariants should hold: /// maxPriorityFeePerGas <= maxFeePerGas /// baseFee <= maxFeePerGas - /// While we charge baseFee from the users, the method is mostly used as a method for validating + /// While we charge baseFee from the users, the method is mostly used as a method for validating /// the correctness of the fee parameters function getGasPrice( maxFeePerGas, @@ -1067,7 +1101,7 @@ object "Bootloader" { ) } - // We always use `baseFee` to charge the transaction + // We always use `baseFee` to charge the transaction ret := baseFee } @@ -1089,7 +1123,7 @@ object "Bootloader" { // Firsly, we publish all the bytecodes needed. This is needed to be done separately, since // bytecodes usually form the bulk of the L2 gas prices. - + let gasLimitForTx, reservedGas := getGasLimitForTx(innerTxDataOffset, transactionIndex, gasPerPubdata, L2_TX_INTRINSIC_GAS(), L2_TX_INTRINSIC_PUBDATA()) @@ -1214,13 +1248,13 @@ object "Bootloader" { ) -> gasLimitForTx, reservedGas { let totalGasLimit := getGasLimit(innerTxDataOffset) - // `MAX_GAS_PER_TRANSACTION` is the amount of gas each transaction + // `MAX_GAS_PER_TRANSACTION` is the amount of gas each transaction // is guaranteed to get, so even if the operator does not trust the account enough, // it is still obligated to provide at least that let operatorTrustedGasLimit := max(MAX_GAS_PER_TRANSACTION(), getOperatorTrustedGasLimitForTx(transactionIndex)) // We remember the amount of gas that is beyond the operator's trust limit to refund it back later. - switch gt(totalGasLimit, operatorTrustedGasLimit) + switch gt(totalGasLimit, operatorTrustedGasLimit) case 0 { reservedGas := 0 } @@ -1240,10 +1274,10 @@ object "Bootloader" { gasLimitForTx := safeSub(totalGasLimit, operatorOverheadForTransaction, "qr") let intrinsicOverhead := safeAdd( - intrinsicGas, + intrinsicGas, // the error messages are trimmed to fit into 32 bytes safeMul(intrinsicPubdata, gasPerPubdata, "qw"), - "fj" + "fj" ) /// /// DEBUG SUPPORT START @@ -1270,7 +1304,7 @@ object "Bootloader" { /// @param txDataOffset The offset to the ABI-encoded Transaction struct. /// @param gasLimitForTx The L2 gas limit for the transaction validation & execution. /// @param gasPrice The L2 gas price that should be used by the transaction. - /// @return ergsLeft The ergs left after the validation step. + /// @return gasLeft The gas left after the validation step. function l2TxValidation( txDataOffset, gasLimitForTx, @@ -1327,9 +1361,9 @@ object "Bootloader" { /// @dev The function responsible for the execution step of the L2 transaction. /// @param txDataOffset The offset to the ABI-encoded Transaction struct. - /// @param ergsLeft The ergs left after the validation step. + /// @param gasLeft The gas left after the validation step. /// @return success Whether or not the execution step was successful. - /// @return ergsSpentOnExecute The ergs spent on the transaction execution. + /// @return gasSpentOnExecute The gas spent on the transaction execution. function l2TxExecution( txDataOffset, gasLeft, @@ -1362,7 +1396,7 @@ object "Bootloader" { mstore(COMPRESSED_BYTECODES_BEGIN_BYTE(), newCompressedFactoryDepsPointer) } - switch gt(gasLeft, gasSpentOnFactoryDeps) + switch gt(gasLeft, gasSpentOnFactoryDeps) case 0 { gasSpentOnExecute := gasLeft gasLeft := 0 @@ -1370,7 +1404,7 @@ object "Bootloader" { default { // Note, that since gt(gasLeft, gasSpentOnFactoryDeps) = true // sub(gasLeft, gasSpentOnFactoryDeps) > 0, which is important - // because a nearCall with 0 ergs passes on all the ergs of the parent frame. + // because a nearCall with 0 gas passes on all the gas of the parent frame. gasLeft := sub(gasLeft, gasSpentOnFactoryDeps) let executeABI := getNearCallABI(gasLeft) @@ -1397,7 +1431,7 @@ object "Bootloader" { notifyExecutionResult(success) } - /// @dev Function responsible for the validation & fee payment step of the transaction. + /// @dev Function responsible for the validation & fee payment step of the transaction. /// @param abi The nearCall ABI. It is implicitly used as gasLimit for the call of this function. /// @param txDataOffset The offset to the ABI-encoded Transaction struct. /// @param gasPrice The gasPrice to be used in this transaction. @@ -1409,22 +1443,22 @@ object "Bootloader" { // For the validation step we always use the bootloader as the tx.origin of the transaction setTxOrigin(BOOTLOADER_FORMAL_ADDR()) setGasPrice(gasPrice) - + // Skipping the first 0x20 word of the ABI-encoding let innerTxDataOffset := add(txDataOffset, 32) debugLog("Starting validation", 0) accountValidateTx(txDataOffset) debugLog("Tx validation complete", 1) - + ensurePayment(txDataOffset, gasPrice) - + ret := 1 } /// @dev Function responsible for the execution of the L2 transaction. /// It includes both the call to the `executeTransaction` method of the account - /// and the call to postOp of the account. + /// and the call to postOp of the account. /// @param abi The nearCall ABI. It is implicitly used as gasLimit for the call of this function. /// @param txDataOffset The offset to the ABI-encoded Transaction struct. function ZKSYNC_NEAR_CALL_executeL2Tx( @@ -1440,7 +1474,7 @@ object "Bootloader" { switch isEOA(from) case true { setTxOrigin(from) - } + } default { setTxOrigin(BOOTLOADER_FORMAL_ADDR()) } @@ -1487,7 +1521,7 @@ object "Bootloader" { let innerTxDataOffset := add(txDataOffset, 32) /// Note, that since it is the near call when it panics it reverts the state changes, but it DOES NOT - /// revert the changes in *memory* of the current frame. That is why we do not change the value under + /// revert the changes in *memory* of the current frame. That is why we do not change the value under /// COMPRESSED_BYTECODES_BEGIN_BYTE(), and it is only changed outside of this method. let dataInfoPtr := mload(COMPRESSED_BYTECODES_BEGIN_BYTE()) let factoryDepsPtr := getFactoryDepsPtr(innerTxDataOffset) @@ -1515,8 +1549,8 @@ object "Bootloader" { } // For all the bytecodes that have not been compressed on purpose or due to the inefficiency - // of compressing the entire preimage of the bytecode will be published. - // For bytecodes published in the previous step, no need pubdata will have to be published + // of compressing the entire preimage of the bytecode will be published. + // For bytecodes published in the previous step, no need pubdata will have to be published markFactoryDepsForTx(innerTxDataOffset, false) newDataInfoPtr := dataInfoPtr @@ -1543,13 +1577,13 @@ object "Bootloader" { } - /// @dev Used to refund the current transaction. - /// The gas that this transaction consumes has been already paid in the + /// @dev Used to refund the current transaction. + /// The gas that this transaction consumes has been already paid in the /// process of the validation function refundCurrentL2Transaction( txDataOffset, transactionIndex, - success, + success, gasLeft, gasPrice, reservedGas @@ -1569,8 +1603,9 @@ object "Bootloader" { } default { refundRecipient := paymaster - + if gt(gasLeft, 0) { + checkEnoughGas(gasLeft) let nearCallAbi := getNearCallABI(gasLeft) let gasBeforePostOp := gas() pop(ZKSYNC_NEAR_CALL_callPostOp( @@ -1581,25 +1616,25 @@ object "Bootloader" { success, // Since the paymaster will be refunded with reservedGas, // it should know about it - safeAdd(gasLeft, reservedGas, "jkl"), + safeAdd(gasLeft, reservedGas, "jkl") )) let gasSpentByPostOp := sub(gasBeforePostOp, gas()) - switch gt(gasLeft, gasSpentByPostOp) - case 1 { + switch gt(gasLeft, gasSpentByPostOp) + case 1 { gasLeft := sub(gasLeft, gasSpentByPostOp) } default { gasLeft := 0 } - } + } } askOperatorForRefund(gasLeft) let operatorProvidedRefund := getOperatorRefundForTx(transactionIndex) - // If the operator provides the value that is lower than the one suggested for + // If the operator provides the value that is lower than the one suggested for // the bootloader, we will use the one calculated by the bootloader. let refundInGas := max(operatorProvidedRefund, add(reservedGas, gasLeft)) @@ -1613,10 +1648,10 @@ object "Bootloader" { } let ethToRefund := safeMul( - refundInGas, - gasPrice, + refundInGas, + gasPrice, "fdf" - ) + ) directETHTransfer(ethToRefund, refundRecipient) @@ -1636,7 +1671,7 @@ object "Bootloader" { gas(), ETH_L2_TOKEN_ADDR(), 0, - 0, + 0, 100, 0, 0 @@ -1676,10 +1711,10 @@ object "Bootloader" { if gt(pointer, sub(COMPRESSED_BYTECODES_END_BYTE(), MIN_ALLOWED_OFFSET_FOR_COMPRESSED_BYTES_POINTER())) { assertionError("calldataEncoding too big") } - } + } /// @dev It is expected that the pointer at the COMPRESSED_BYTECODES_BEGIN_BYTE() - /// stores the position of the current bytecodeHash + /// stores the position of the current bytecodeHash function sendCompressedBytecode(dataInfoPtr, bytecodeHash) -> ret { // Storing the right selector, ensuring that the operator cannot manipulate it mstore(add(dataInfoPtr, 32), {{PUBLISH_COMPRESSED_BYTECODE_SELECTOR}}) @@ -1706,8 +1741,8 @@ object "Bootloader" { checkOffset(nextAfterCalldata) let totalLen := safeSub(nextAfterCalldata, calldataPtr, "xqwf") - - // Note, that it is safe because the + + // Note, that it is safe because the let success := call( gas(), BYTECODE_COMPRESSOR_ADDR(), @@ -1729,7 +1764,7 @@ object "Bootloader" { let returnedBytecodeHash := mload(0) // If the bytecode hash calculated on the bytecode compressor's side - // is not equal to the one provided by the operator means that the operator is + // is not equal to the one provided by the operator means that the operator is // malicious and we should revert the batch altogether if iszero(eq(returnedBytecodeHash, bytecodeHash)) { assertionError("bytecodeHash incorrect") @@ -1741,7 +1776,7 @@ object "Bootloader" { /// @dev Get checked for overcharged operator's overhead for the transaction. /// @param transactionIndex The index of the transaction in the batch /// @param txTotalGasLimit The total gass limit of the transaction (including the overhead). - /// @param gasPerPubdataByte The price for pubdata byte in ergs. + /// @param gasPerPubdataByte The price for pubdata byte in gas. /// @param txEncodeLen The length of the ABI-encoding of the transaction function getVerifiedOperatorOverheadForTx( transactionIndex, @@ -1841,15 +1876,15 @@ object "Bootloader" { precompileCall(gas()) } - /// @dev Executes the `precompileCall` opcode. + /// @dev Executes the `precompileCall` opcode. /// Since the bootloader has no implicit meaning for this opcode, /// this method just burns gas. function precompileCall(gasToBurn) { - // We don't care about the return value, since it is a opcode simulation + // We don't care about the return value, since it is a opcode simulation // and the return value doesn't have any meaning. let ret := verbatim_2i_1o("precompile", 0, gasToBurn) } - + /// @dev Returns the pointer to the latest returndata. function returnDataPtr() -> ret { ret := verbatim_0i_1o("get_global::ptr_return_data") @@ -1865,7 +1900,7 @@ object "Bootloader" { let innerTxDataOffset := add(txDataOffset, 32) let to := getTo(innerTxDataOffset) let from := getFrom(innerTxDataOffset) - + debugLog("from: ", from) debugLog("to: ", to) @@ -1879,7 +1914,7 @@ object "Bootloader" { let dataPtr := getDataPtr(innerTxDataOffset) markFactoryDepsForTx(innerTxDataOffset, false) - + let value := getValue(innerTxDataOffset) let success := msgValueSimulatorMimicCall( @@ -1900,7 +1935,7 @@ object "Bootloader" { mstore(resultPtr, success) // Store results of the call in the memory. - if success { + if success { let returnsize := returndatasize() returndatacopy(0,0,returnsize) return(0,returnsize) @@ -1909,6 +1944,37 @@ object "Bootloader" { } + /// @dev Given the callee and the data to be called with, + /// this function returns whether the mimicCall should use the `isSystem` flag. + /// This flag should only be used for contract deployments and nothing else. + /// @param to The callee of the call. + /// @param dataPtr The pointer to the calldata of the transaction. + function shouldMsgValueMimicCallBeSystem(to, dataPtr) -> ret { + let dataLen := mload(dataPtr) + // Note, that this point it is not fully known whether it is indeed the selector + // of the calldata (it might not be the case if the `dataLen` < 4), but it will be checked later on + let selector := shr(224, mload(add(dataPtr, 32))) + + let isSelectorCreate := or( + eq(selector, {{CREATE_SELECTOR}}), + eq(selector, {{CREATE_ACCOUNT_SELECTOR}}) + ) + let isSelectorCreate2 := or( + eq(selector, {{CREATE2_SELECTOR}}), + eq(selector, {{CREATE2_ACCOUNT_SELECTOR}}) + ) + + // Firstly, ensure that the selector is a valid deployment function + ret := or( + isSelectorCreate, + isSelectorCreate2 + ) + // Secondly, ensure that the callee is ContractDeployer + ret := and(ret, eq(to, CONTRACT_DEPLOYER_ADDR())) + // Thirdly, ensure that the calldata is long enough to contain the selector + ret := and(ret, gt(dataLen, 3)) + } + /// @dev Given the pointer to the calldata, the value and to /// performs the call through the msg.value simulator. /// @param to Which contract to call @@ -1918,11 +1984,11 @@ object "Bootloader" { /// the length of the calldata and the calldata itself right afterwards. function msgValueSimulatorMimicCall(to, from, value, dataPtr) -> success { // Only calls to the deployer system contract are allowed to be system - let isSystem := eq(to, CONTRACT_DEPLOYER_ADDR()) + let isSystem := shouldMsgValueMimicCallBeSystem(to, dataPtr) success := mimicCallOnlyResult( MSG_VALUE_SIMULATOR_ADDR(), - from, + from, dataPtr, 0, 1, @@ -1933,13 +1999,13 @@ object "Bootloader" { } /// @dev Checks whether the current frame has enough gas - /// @dev It does not use 63/64 rule and should only be called before nearCalls. + /// @dev It does not use 63/64 rule and should only be called before nearCalls. function checkEnoughGas(gasToProvide) { debugLog("gas()", gas()) debugLog("gasToProvide", gasToProvide) // Using margin of CHECK_ENOUGH_GAS_OVERHEAD gas to make sure that the operation will indeed - // have enough gas + // have enough gas if lt(gas(), safeAdd(gasToProvide, CHECK_ENOUGH_GAS_OVERHEAD(), "cjq")) { revertWithReason(NOT_ENOUGH_GAS_PROVIDED_ERR_CODE(), 0) } @@ -1952,14 +2018,14 @@ object "Bootloader" { let l1GasPerPubdata := L1_GAS_PER_PUBDATA_BYTE() // Since the user specifies the amount of gas he is willing to pay for a *byte of pubdata*, - // we need to convert the number of L1 gas needed to process the batch into the equivalent number of + // we need to convert the number of L1 gas needed to process the batch into the equivalent number of // pubdata to pay for. // The difference between ceil and floor division here is negligible, // so we prefer doing the cheaper operation for the end user let pubdataEquivalentForL1Gas := safeDiv(l1GasOverhead, l1GasPerPubdata, "dd") - + ret := safeAdd( - computationOverhead, + computationOverhead, safeMul(gasPerPubdata, pubdataEquivalentForL1Gas, "aa"), "ab" ) @@ -1975,11 +2041,11 @@ object "Bootloader" { /// @param txEncodeLen The length of the ABI-encoding of the transaction /// @dev The % following 3 resources is taken into account when calculating the % of the batch's overhead to pay. /// 1. The % of the maximal gas per transaction. It is assumed that `MAX_GAS_PER_TRANSACTION` gas is enough to consume all - /// the single-instance circuits. Meaning that the transaction should pay at least txGasLimit/MAX_GAS_PER_TRANSACTION part + /// the single-instance circuits. Meaning that the transaction should pay at least txGasLimit/MAX_GAS_PER_TRANSACTION part /// of the overhead. /// 2. Overhead for taking up the bootloader memory. The bootloader memory has a cap on its length, mainly enforced to keep the RAM requirements /// for the node smaller. That is, the user needs to pay a share proportional to the length of the ABI encoding of the transaction. - /// 3. Overhead for taking up a slot for the transaction. Since each batch has the limited number of transactions in it, the user must pay + /// 3. Overhead for taking up a slot for the transaction. Since each batch has the limited number of transactions in it, the user must pay /// at least 1/MAX_TRANSACTIONS_IN_BATCH part of the overhead. function getTransactionUpfrontOverhead( txGasLimit, @@ -1997,7 +2063,7 @@ object "Bootloader" { ret := max(ret, overheadForCircuits) debugLog("overheadForCircuits", overheadForCircuits) - + let overheadForLength := ceilDiv( safeMul(txEncodeLen, totalBatchOverhead, "ad"), BOOTLOADER_MEMORY_FOR_TXS() @@ -2005,14 +2071,14 @@ object "Bootloader" { ret := max(ret, overheadForLength) debugLog("overheadForLength", overheadForLength) - + let overheadForSlot := ceilDiv( totalBatchOverhead, MAX_TRANSACTIONS_IN_BATCH() ) ret := max(ret, overheadForSlot) debugLog("overheadForSlot", overheadForSlot) - + /// /// DEBUG SUPPORT START /// @@ -2027,13 +2093,13 @@ object "Bootloader" { /// // In the proved batch we ensure that the gasPerPubdataByte is not zero - // to avoid the potential edge case of division by zero. In Yul, division by + // to avoid the potential edge case of division by zero. In Yul, division by // zero does not panic, but returns zero. if and(iszero(gasPerPubdataByte), FORBID_ZERO_GAS_PER_PUBDATA()) { assertionError("zero gasPerPubdataByte") } - + } /// @dev A method where all panics in the nearCalls get to. @@ -2042,16 +2108,16 @@ object "Bootloader" { debugLog("ZKSYNC_CATCH_NEAR_CALL",0) setHook(VM_HOOK_CATCH_NEAR_CALL()) } - + /// @dev Prepends the selector before the txDataOffset, /// preparing it to be used to call either `verify` or `execute`. /// Returns the pointer to the calldata. /// Note, that this overrides 32 bytes before the current transaction: function prependSelector(txDataOffset, selector) -> ret { - + let calldataPtr := sub(txDataOffset, 4) - // Note, that since `mstore` stores 32 bytes at once, we need to - // actually store the selector in one word starting with the + // Note, that since `mstore` stores 32 bytes at once, we need to + // actually store the selector in one word starting with the // (txDataOffset - 32) = (calldataPtr - 28) mstore(sub(calldataPtr, 28), selector) @@ -2110,7 +2176,7 @@ object "Bootloader" { } // This method returns AccountAbstractVersion enum. - // Currently only two versions are supported: 1 or 0, which basically + // Currently only two versions are supported: 1 or 0, which basically // mean whether the contract is an account or not. if iszero(supportedVersion) { revertWithReason( @@ -2161,16 +2227,16 @@ object "Bootloader" { } /// @dev Used to call a method with the following signature; - /// someName( + /// someName( /// bytes32 _txHash, - /// bytes32 _suggestedSignedHash, + /// bytes32 _suggestedSignedHash, /// Transaction calldata _transaction /// ) - // Note, that this method expects that the current tx hashes are already stored + // Note, that this method expects that the current tx hashes are already stored // in the `CURRENT_L2_TX_HASHES` slots. function callAccountMethod(selector, account, txDataOffset) -> success { - // Safety invariant: it is safe to override data stored under - // `txDataOffset`, since the account methods are called only using + // Safety invariant: it is safe to override data stored under + // `txDataOffset`, since the account methods are called only using // `callAccountMethod` or `callPostOp` methods, both of which reformat // the contents before innerTxDataOffset (i.e. txDataOffset + 32 bytes), // i.e. make sure that the position at the txDataOffset has valid value. @@ -2250,7 +2316,7 @@ object "Bootloader" { /// @param paymaster The address of the paymaster /// @param txDataOffset The offset to the ABI-encoded Transaction struct. /// @param txResult The status of the transaction (1 if succeeded, 0 otherwise). - /// @param maxRefundedGas The maximum number of gas the bootloader can be refunded. + /// @param maxRefundedGas The maximum number of gas the bootloader can be refunded. /// This is the `maximum` number because it does not take into account the number of gas that /// can be spent by the paymaster itself. function ZKSYNC_NEAR_CALL_callPostOp(abi, paymaster, txDataOffset, txResult, maxRefundedGas) -> success { @@ -2272,7 +2338,7 @@ object "Bootloader" { // 6. _maxRefundedGas (32 bytes) // 7. _context (note, that the content must be padded to 32 bytes) // 8. _transaction - + let contextLen := mload(PAYMASTER_CONTEXT_BEGIN_BYTE()) let paddedContextLen := lengthRoundedByWords(contextLen) // The length of selector + the first 7 fields (with context len) + context itself. @@ -2287,11 +2353,11 @@ object "Bootloader" { // Selector mstore(ptr, {{RIGHT_PADDED_POST_TRANSACTION_SELECTOR}}) ptr := add(ptr, 4) - + // context ptr mstore(ptr, 192) // The context always starts at 32 * 6 position ptr := add(ptr, 32) - + // transaction ptr mstore(ptr, sub(innerTxDataOffset, add(calldataPtr, 4))) ptr := add(ptr, 32) @@ -2316,18 +2382,18 @@ object "Bootloader" { memCopy(PAYMASTER_CONTEXT_BEGIN_BYTE(), ptr, add(32, paddedContextLen)) ptr := add(ptr, add(32, paddedContextLen)) - // At this point, the ptr should reach the innerTxDataOffset. + // At this point, the ptr should reach the innerTxDataOffset. // If not, we have done something wrong here. if iszero(eq(ptr, innerTxDataOffset)) { assertionError("postOp: ptr != innerTxDataOffset") } - + // no need to store the transaction as from the innerTxDataOffset starts // valid encoding of the transaction } let calldataLen := safeAdd(preTxLen, getDataLength(innerTxDataOffset), "jiq") - + success := call( gas(), paymaster, @@ -2349,7 +2415,7 @@ object "Bootloader" { let finalFrom := safeAdd(from, len, "cka") - for { } lt(from, finalFrom) { + for { } lt(from, finalFrom) { from := add(from, 32) to := add(to, 32) } { @@ -2395,8 +2461,8 @@ object "Bootloader" { /// correct returndatasize function ensureCorrectAccountMagic() { // It is expected that the returned value is ABI-encoded bytes4 magic value - // The Solidity always pads such value to 32 bytes and so we expect the magic to be - // of length 32 + // The Solidity always pads such value to 32 bytes and so we expect the magic to be + // of length 32 if iszero(eq(32, returndatasize())) { revertWithReason( ACCOUNT_RETURNED_INVALID_MAGIC_ERR_CODE(), @@ -2406,7 +2472,7 @@ object "Bootloader" { // Note that it is important to copy the magic even though it is not needed if the // `SHOULD_ENSURE_CORRECT_RETURNED_MAGIC` is false. It is never false in production - // but it is so in fee estimation and we want to preserve as many operations as + // but it is so in fee estimation and we want to preserve as many operations as // in the original operation. returndatacopy(0, 0, 32) let returnedValue := mload(0) @@ -2420,13 +2486,13 @@ object "Bootloader" { } } - /// @dev Calls the KnownCodesStorage system contract to mark the factory dependencies of + /// @dev Calls the KnownCodesStorage system contract to mark the factory dependencies of /// the transaction as known. function markFactoryDepsForTx(innerTxDataOffset, isL1Tx) { debugLog("starting factory deps", 0) let factoryDepsPtr := getFactoryDepsPtr(innerTxDataOffset) let factoryDepsLength := mload(factoryDepsPtr) - + if gt(factoryDepsLength, MAX_NEW_FACTORY_DEPS()) { assertionError("too many factory deps") } @@ -2452,7 +2518,7 @@ object "Bootloader" { let arrayLengthBytes := safeAdd(32, safeMul(factoryDepsLength, 32, "ag"), "af") // Copying factory deps array memCopy(factoryDepsPtr, ptr, arrayLengthBytes) - + let success := call( gas(), KNOWN_CODES_CONTRACT_ADDR(), @@ -2469,7 +2535,7 @@ object "Bootloader" { if iszero(success) { debugReturndata() - switch isL1Tx + switch isL1Tx case 1 { revertWithReason( FAILED_TO_MARK_FACTORY_DEPS(), @@ -2490,7 +2556,7 @@ object "Bootloader" { let value := getValue(innerTxDataOffset) debugLog("value", value) let dataPtr := getDataPtr(innerTxDataOffset) - + let dataLength := mload(dataPtr) let data := add(dataPtr, 32) @@ -2506,11 +2572,11 @@ object "Bootloader" { } } - /// @dev Function responsible for the execution of the L2 transaction + /// @dev Function responsible for the execution of the L2 transaction /// @dev Returns `true` or `false` depending on whether or not the tx has reverted. function executeL2Tx(txDataOffset, from) -> ret { ret := callAccountMethod({{EXECUTE_TX_SELECTOR}}, from, txDataOffset) - + if iszero(ret) { debugReturndata() } @@ -2520,12 +2586,12 @@ object "Bootloader" { /// zkSync-specific utilities: /// - /// @dev Returns an ABI that can be used for low-level + /// @dev Returns an ABI that can be used for low-level /// invocations of calls and mimicCalls /// @param dataPtr The pointer to the calldata. /// @param gasPassed The number of gas to be passed with the call. /// @param shardId The shard id of the callee. Currently only `0` (Rollup) is supported. - /// @param forwardingMode The mode of how the calldata is forwarded + /// @param forwardingMode The mode of how the calldata is forwarded /// It is possible to either pass a pointer, slice of auxheap or heap. For the /// bootloader purposes using heap (0) is enough. /// @param isConstructorCall Whether the call should contain the isConstructor flag. @@ -2583,9 +2649,9 @@ object "Bootloader" { isSystemCall ) - ret := verbatim_7i_1o("system_mimic_call", to, whoToMimic, farCallAbi, extraAbi1, extraAbi2, extraAbi3, 0) + ret := verbatim_7i_1o("system_mimic_call", to, whoToMimic, farCallAbi, extraAbi1, extraAbi2, extraAbi3, 0) } - + // Extracts the required byte from the 32-byte word. // 31 would mean the MSB, 0 would mean LSB. @@ -2682,7 +2748,7 @@ object "Bootloader" { ) if iszero(success) { - debugLog("Failed publish timestamp data to L1", 0) + debugLog("Failed publish timestamp to L1", 0) revertWithReason(FAILED_TO_PUBLISH_TIMESTAMP_DATA_TO_L1(), 1) } } @@ -2708,7 +2774,7 @@ object "Bootloader" { revertWithReason(FAILED_TO_CALL_SYSTEM_CONTEXT_ERR_CODE(), 1) } } - + /// @dev Increment the number of txs in the batch function considerNewTx() { verbatim_0i_0o("increment_tx_counter") @@ -2726,7 +2792,7 @@ object "Bootloader" { let success := setContextVal({{RIGHT_PADDED_SET_TX_ORIGIN}}, newTxOrigin) if iszero(success) { - debugLog("Failed to set txOrigin", newTxOrigin) + debugLog("Failed to set txOrigin", newTxOrigin) nearCallPanic() } } @@ -2813,10 +2879,10 @@ object "Bootloader" { } } - /// @notice Appends the transaction hash to the current L2 block. + /// @notice Appends the transaction hash to the current L2 block. /// @param txHash The hash of the transaction to append. /// @param isL1Tx Whether the transaction is an L1 transaction. If it is an L1 transaction, - /// and this method fails, then the bootloader execution will be explicitly reverted. + /// and this method fails, then the bootloader execution will be explicitly reverted. /// Otherwise, the nearCallPanic will be used to implicitly fail the validation of the transaction. function appendTransactionHash( txHash, @@ -2847,8 +2913,8 @@ object "Bootloader" { ) } default { - // For L2 transactions, we use near call panic, it will triger the validation - // step of the transaction to fail, returning a consistent error message. + // For L2 transactions, we use near call panic, it will triger the validation + // step of the transaction to fail, returning a consistent error message. nearCallPanic() } } @@ -2856,7 +2922,7 @@ object "Bootloader" { /// @notice Arbitrarily overrides the current batch information. - /// @dev It should NOT be available in the proved batch. + /// @dev It should NOT be available in the proved batch. function unsafeOverrideBatch(newTimestamp, newBatchNumber, baseFee) { mstore(0, {{RIGHT_PADDED_OVERRIDE_BATCH_SELECTOR}}) mstore(4, newTimestamp) @@ -2883,7 +2949,7 @@ object "Bootloader" { - // Checks whether the nonce `nonce` have been already used for + // Checks whether the nonce `nonce` have been already used for // account `from`. Reverts if the nonce has not been used properly. function ensureNonceUsage(from, nonce, shouldNonceBeUsed) { // INonceHolder.validateNonceUsage selector @@ -2939,15 +3005,15 @@ object "Bootloader" { // uint256 from; // // The callee. // uint256 to; - // // The gasLimit to pass with the transaction. + // // The gasLimit to pass with the transaction. // // It has the same meaning as Ethereum's gasLimit. // uint256 gasLimit; // // The maximum amount of gas the user is willing to pay for a byte of pubdata. // uint256 gasPerPubdataByteLimit; - // // The maximum fee per gas that the user is willing to pay. + // // The maximum fee per gas that the user is willing to pay. // // It is akin to EIP1559's maxFeePerGas. // uint256 maxFeePerGas; - // // The maximum priority fee per gas that the user is willing to pay. + // // The maximum priority fee per gas that the user is willing to pay. // // It is akin to EIP1559's maxPriorityFeePerGas. // uint256 maxPriorityFeePerGas; // // The transaction's paymaster. If there is no paymaster, it is equal to 0. @@ -2980,15 +3046,15 @@ object "Bootloader" { // bytes reservedDynamic; // } - /// @notice Asserts the equality of two values and reverts + /// @notice Asserts the equality of two values and reverts /// with the appropriate error message in case it doesn't hold /// @param value1 The first value of the assertion /// @param value2 The second value of the assertion /// @param message The error message function assertEq(value1, value2, message) { - switch eq(value1, value2) + switch eq(value1, value2) case 0 { assertionError(message) } - default { } + default { } } /// @notice Makes sure that the structure of the transaction is set in accordance to its type @@ -3016,8 +3082,8 @@ object "Bootloader" { - - // Here, for type 0 transactions the reserved0 field is used as a marker + + // Here, for type 0 transactions the reserved0 field is used as a marker // whether the transaction should include chainId in its encoding. assertEq(lte(getGasPerPubdataByteLimit(innerTxDataOffset), MAX_L2_GAS_PER_PUBDATA()), 1, "Gas per pubdata is wrong") assertEq(getPaymaster(innerTxDataOffset), 0, "paymaster non zero") @@ -3038,7 +3104,7 @@ object "Bootloader" { let maxFeePerGas := getMaxFeePerGas(innerTxDataOffset) let maxPriorityFeePerGas := getMaxPriorityFeePerGas(innerTxDataOffset) assertEq(maxFeePerGas, maxPriorityFeePerGas, "EIP1559 params wrong") - + let from := getFrom(innerTxDataOffset) @@ -3048,7 +3114,7 @@ object "Bootloader" { - + assertEq(lte(getGasPerPubdataByteLimit(innerTxDataOffset), MAX_L2_GAS_PER_PUBDATA()), 1, "Gas per pubdata is wrong") assertEq(getPaymaster(innerTxDataOffset), 0, "paymaster non zero") @@ -3075,11 +3141,12 @@ object "Bootloader" { let iseoa := isEOA(from) assertEq(iseoa, true, "Only EIP-712 can use non-EOA") + - - + + assertEq(gt(getFrom(innerTxDataOffset), MAX_SYSTEM_CONTRACT_ADDR()), 1, "from in kernel space") @@ -3092,7 +3159,7 @@ object "Bootloader" { assertEq(getFactoryDepsBytesLength(innerTxDataOffset), 0, "factory deps non zero") assertEq(getPaymasterInputBytesLength(innerTxDataOffset), 0, "paymasterInput non zero") } - case 113 { + case 113 { let paymaster := getPaymaster(innerTxDataOffset) assertEq(or(gt(paymaster, MAX_SYSTEM_CONTRACT_ADDR()), iszero(paymaster)), 1, "paymaster in kernel space") @@ -3117,125 +3184,125 @@ object "Bootloader" { case 255 { // Double-check that the operator doesn't try to do an upgrade transaction via L1 -> L2 transaction. assertEq(gt(getFrom(innerTxDataOffset), MAX_SYSTEM_CONTRACT_ADDR()), 1, "from in kernel space") - // L1 transaction, no need to validate as it is validated on L1. + // L1 transaction, no need to validate as it is validated on L1. } default { assertionError("Unknown tx type") } } - /// + /// /// TransactionData utilities - /// + /// /// @dev The next methods are programmatically generated /// function getTxType(innerTxDataOffset) -> ret { ret := mload(innerTxDataOffset) } - + function getFrom(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 32)) } - + function getTo(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 64)) } - + function getGasLimit(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 96)) } - + function getGasPerPubdataByteLimit(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 128)) } - + function getMaxFeePerGas(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 160)) } - + function getMaxPriorityFeePerGas(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 192)) } - + function getPaymaster(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 224)) } - + function getNonce(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 256)) } - + function getValue(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 288)) } - + function getReserved0(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 320)) } - + function getReserved1(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 352)) } - + function getReserved2(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 384)) } - + function getReserved3(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 416)) } - + function getDataPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 448)) ret := add(innerTxDataOffset, ret) } - + function getDataBytesLength(innerTxDataOffset) -> ret { let ptr := getDataPtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + function getSignaturePtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 480)) ret := add(innerTxDataOffset, ret) } - + function getSignatureBytesLength(innerTxDataOffset) -> ret { let ptr := getSignaturePtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + function getFactoryDepsPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 512)) ret := add(innerTxDataOffset, ret) } - + function getFactoryDepsBytesLength(innerTxDataOffset) -> ret { let ptr := getFactoryDepsPtr(innerTxDataOffset) ret := safeMul(mload(ptr),32, "fwop") } - + function getPaymasterInputPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 544)) ret := add(innerTxDataOffset, ret) } - + function getPaymasterInputBytesLength(innerTxDataOffset) -> ret { let ptr := getPaymasterInputPtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + function getReservedDynamicPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 576)) ret := add(innerTxDataOffset, ret) } - + function getReservedDynamicBytesLength(innerTxDataOffset) -> ret { let ptr := getReservedDynamicPtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + /// This method checks that the transaction's structure is correct /// and tightly packed function validateAbiEncoding(txDataOffset) -> ret { @@ -3249,17 +3316,17 @@ object "Bootloader" { if iszero(validateAddress(fromValue)) { assertionError("Encoding from") } - + let toValue := getTo(innerTxDataOffset) if iszero(validateAddress(toValue)) { assertionError("Encoding to") } - + let gasLimitValue := getGasLimit(innerTxDataOffset) if iszero(validateUint32(gasLimitValue)) { assertionError("Encoding gasLimit") } - + let gasPerPubdataByteLimitValue := getGasPerPubdataByteLimit(innerTxDataOffset) if iszero(validateUint32(gasPerPubdataByteLimitValue)) { assertionError("Encoding gasPerPubdataByteLimit") @@ -3274,26 +3341,26 @@ object "Bootloader" { if iszero(validateUint128(maxPriorityFeePerGas)) { assertionError("Encoding maxPriorityFeePerGas") } - + let paymasterValue := getPaymaster(innerTxDataOffset) if iszero(validateAddress(paymasterValue)) { assertionError("Encoding paymaster") } let expectedDynamicLenPtr := add(innerTxDataOffset, 608) - + let dataLengthPos := getDataPtr(innerTxDataOffset) if iszero(eq(dataLengthPos, expectedDynamicLenPtr)) { assertionError("Encoding data") } expectedDynamicLenPtr := validateBytes(dataLengthPos) - + let signatureLengthPos := getSignaturePtr(innerTxDataOffset) if iszero(eq(signatureLengthPos, expectedDynamicLenPtr)) { assertionError("Encoding signature") } expectedDynamicLenPtr := validateBytes(signatureLengthPos) - + let factoryDepsLengthPos := getFactoryDepsPtr(innerTxDataOffset) if iszero(eq(factoryDepsLengthPos, expectedDynamicLenPtr)) { assertionError("Encoding factoryDeps") @@ -3321,17 +3388,17 @@ object "Bootloader" { // in bytes. ret := 768 - ret := safeAdd(ret, getDataBytesLength(innerTxDataOffset), "asx") + ret := safeAdd(ret, getDataBytesLength(innerTxDataOffset), "asx") ret := safeAdd(ret, getSignatureBytesLength(innerTxDataOffset), "qwqa") ret := safeAdd(ret, getFactoryDepsBytesLength(innerTxDataOffset), "sic") ret := safeAdd(ret, getPaymasterInputBytesLength(innerTxDataOffset), "tpiw") ret := safeAdd(ret, getReservedDynamicBytesLength(innerTxDataOffset), "shy") } - /// + /// /// End of programmatically generated code /// - + /// @dev Accepts an address and returns whether or not it is /// a valid address function validateAddress(addr) -> ret { @@ -3363,14 +3430,14 @@ object "Bootloader" { let lastWordBytes := mod(length, 32) switch lastWordBytes - case 0 { - // If the length is divisible by 32, then + case 0 { + // If the length is divisible by 32, then // the bytes occupy whole words, so there is // nothing to validate - bytesEnd := safeAdd(bytesPtr, safeAdd(length, 32, "pol"), "aop") + bytesEnd := safeAdd(bytesPtr, safeAdd(length, 32, "pol"), "aop") } default { - // If the length is not divisible by 32, then + // If the length is not divisible by 32, then // the last word is padded with zeroes, i.e. // the last 32 - `lastWordBytes` bytes must be zeroes // The easiest way to check this is to use AND operator @@ -3392,8 +3459,8 @@ object "Bootloader" { } } - /// @dev Accepts the pointer to the bytes32[] array length and - /// returns the pointer right after the array's content + /// @dev Accepts the pointer to the bytes32[] array length and + /// returns the pointer right after the array's content function validateBytes32Array(arrayPtr) -> arrayEnd { // The bytes32[] array takes full words which may contain any content. // Thus, there is nothing to validate. @@ -3436,7 +3503,7 @@ object "Bootloader" { } } - /// @dev Returns the addition of two unsigned integers, reverting on overflow. + /// @dev Returns the subtraction of two unsigned integers, reverting on underflow. function safeSub(x, y, errMsg) -> ret { if gt(y, x) { assertionError(errMsg) @@ -3449,7 +3516,7 @@ object "Bootloader" { /// /// @notice A method used to prevent optimization of x by the compiler - /// @dev This method is only used for logging purposes + /// @dev This method is only used for logging purposes function nonOptimized(x) -> ret { // value() is always 0 in bootloader context. ret := add(mul(callvalue(),x),x) @@ -3466,7 +3533,7 @@ object "Bootloader" { /// @dev Triggers a hook that displays the returndata on the server side. function debugReturndata() { debugLog("returndataptr", returnDataPtr()) - storeVmHookParam(0, returnDataPtr()) + storeVmHookParam(0, returnDataPtr()) setHook(VM_HOOK_DEBUG_RETURNDATA()) } @@ -3474,7 +3541,7 @@ object "Bootloader" { /// refunded to the user. This is to be used by the operator to derive the correct /// `gasUsed` in the API. function notifyAboutRefund(refund) { - storeVmHookParam(0, nonOptimized(refund)) + storeVmHookParam(0, nonOptimized(refund)) setHook(VM_NOTIFY_OPERATOR_ABOUT_FINAL_REFUND()) debugLog("refund(gas)", refund) } @@ -3490,10 +3557,10 @@ object "Bootloader" { } /// @dev Asks operator for the refund for the transaction. The function provides - /// the operator with the leftover gas found by the bootloader. + /// the operator with the leftover gas found by the bootloader. /// This function is called before the refund stage, because at that point /// only the operator knows how close does a transaction - /// bring us to closing the batch as well as how much the transaction + /// bring us to closing the batch as well as how much the transaction /// should've spent on the pubdata/computation/etc. /// After it is run, the operator should put the expected refund /// into the memory slot (in the out of circuit execution). @@ -3503,10 +3570,10 @@ object "Bootloader" { storeVmHookParam(0, nonOptimized(gasLeft)) setHook(VM_HOOK_ASK_OPERATOR_FOR_REFUND()) } - - /// + + /// /// Error codes used for more correct diagnostics from the server side. - /// + /// function ETH_CALL_ERR_CODE() -> ret { ret := 0 @@ -3612,19 +3679,19 @@ object "Bootloader" { ret := 25 } - function L1_MESSENGER_PUBLISHING_FAILED_ERR_CODE() -> ret { + function FAILED_TO_PUBLISH_TIMESTAMP_DATA_TO_L1() -> ret { ret := 26 } - function L1_MESSENGER_LOG_SENDING_FAILED_ERR_CODE() -> ret { + function L1_MESSENGER_PUBLISHING_FAILED_ERR_CODE() -> ret { ret := 27 } - function FAILED_TO_CALL_SYSTEM_CONTEXT_ERR_CODE() -> ret { + function L1_MESSENGER_LOG_SENDING_FAILED_ERR_CODE() -> ret { ret := 28 } - function FAILED_TO_PUBLISH_TIMESTAMP_DATA_TO_L1() -> ret { + function FAILED_TO_CALL_SYSTEM_CONTEXT_ERR_CODE() -> ret { ret := 29 } @@ -3632,14 +3699,14 @@ object "Bootloader" { /// @param str A string literal function getStrLen(str) -> len { len := 0 - // The string literals are stored left-aligned. Thus, + // The string literals are stored left-aligned. Thus, // In order to get the length of such string, - // we shift it to the left (remove one byte to the left) until + // we shift it to the left (remove one byte to the left) until // no more non-empty bytes are left. for {} str {str := shl(8, str)} { len := add(len, 1) } - } + } // Selector of the errors used by the "require" statements in Solidity // and the one that can be parsed by our server. @@ -3655,19 +3722,19 @@ object "Bootloader" { mstore8(ptr, ASSERTION_ERROR()) ptr := add(ptr, 1) - // Then, we need to put the returndata in a way that is easily parsable by our + // Then, we need to put the returndata in a way that is easily parsable by our // servers mstore(ptr, GENERAL_ERROR_SELECTOR()) ptr := add(ptr, 4) - + // Then, goes the "data offset". It is has constant value of 32. mstore(ptr, 32) ptr := add(ptr, 32) - + // Then, goes the length of the string: mstore(ptr, getStrLen(err)) ptr := add(ptr, 32) - + // Then, we put the actual string mstore(ptr, err) ptr := add(ptr, 32) @@ -3677,8 +3744,8 @@ object "Bootloader" { /// @notice Accepts an error code and whether there is a need to copy returndata /// @param errCode The code of the error - /// @param sendReturnData A flag of whether or not the returndata should be used in the - /// revert reason as well. + /// @param sendReturnData A flag of whether or not the returndata should be used in the + /// revert reason as well. function revertWithReason(errCode, sendReturnData) { let returndataLen := 1 mstore8(0, errCode) @@ -3692,8 +3759,8 @@ object "Bootloader" { revert(0, returndataLen) } - /// @notice The id of the VM hook that notifies the operator that the transaction - /// validation rules should start applying (i.e. the user should not be allowed to access + /// @notice The id of the VM hook that notifies the operator that the transaction + /// validation rules should start applying (i.e. the user should not be allowed to access /// other users' storage, etc). function VM_HOOK_ACCOUNT_VALIDATION_ENTERED() -> ret { ret := 0 @@ -3705,14 +3772,14 @@ object "Bootloader" { ret := 1 } - /// @notice The id of the VM hook that notifies the operator that the transaction's validation - /// restrictions should no longer apply. Note, that this is different from the validation ending, + /// @notice The id of the VM hook that notifies the operator that the transaction's validation + /// restrictions should no longer apply. Note, that this is different from the validation ending, /// since for instance the bootloader needs to do some actions during validation which are forbidden for users. /// So this hook is used to notify the operator that the restrictions should be temporarily lifted. function VM_HOOK_NO_VALIDATION_ENTERED() -> ret { ret := 2 } - + /// @notice The id of the VM hook that notifies the operator that the transaction's validation has ended. function VM_HOOK_VALIDATION_STEP_ENDED() -> ret { ret := 3 @@ -3738,8 +3805,8 @@ object "Bootloader" { function VM_HOOK_CATCH_NEAR_CALL() -> ret { ret := 7 } - - /// @notice The id of the VM hook that is used to notify the operator about the need to put the refund for + + /// @notice The id of the VM hook that is used to notify the operator about the need to put the refund for /// the current transaction into the bootloader's memory. function VM_HOOK_ASK_OPERATOR_FOR_REFUND() -> ret { ret := 8 @@ -3766,17 +3833,17 @@ object "Bootloader" { ret := 12 } - // Need to prevent the compiler from optimizing out similar operations, - // which may have different meaning for the offline debugging + // Need to prevent the compiler from optimizing out similar operations, + // which may have different meaning for the offline debugging function unoptimized(val) -> ret { ret := add(val, callvalue()) } - /// @notice Triggers a VM hook. + /// @notice Triggers a VM hook. /// The server will recognize it and output corresponding logs. function setHook(hook) { mstore(VM_HOOK_PTR(), unoptimized(hook)) - } + } /// @notice Sets a value to a param of the vm hook. /// @param paramId The id of the VmHook parameter. @@ -3829,13 +3896,13 @@ object "Bootloader" { /// For now, this value is trusted to be fairly provided by the operator. let L1_GAS_PRICE := mload(128) - /// @notice The minimal gas price that the operator agrees upon. + /// @notice The minimal gas price that the operator agrees upon. /// In the future, it will have an EIP1559-like lower bound. let FAIR_L2_GAS_PRICE := mload(160) /// @notice The expected base fee by the operator. /// Just like the batch number, while calculated on the bootloader side, - /// the operator still provides it to make sure that its data is in sync. + /// the operator still provides it to make sure that its data is in sync. let EXPECTED_BASE_FEE := mload(192) validateOperatorProvidedPrices(L1_GAS_PRICE, FAIR_L2_GAS_PRICE) @@ -3844,7 +3911,12 @@ object "Bootloader" { - // Only for the proved batch we enforce that the baseFee proposed + // This implementation of the bootloader relies on the correct version of the SystemContext + // and it can not be upgraded via a standard upgrade transaction, but needs to ensure + // correctness itself before any transaction is executed. + upgradeSystemContextIfNeeded() + + // Only for the proved batch we enforce that the baseFee proposed // by the operator is equal to the expected one. For the playground batch, we allow // the operator to provide any baseFee the operator wants. baseFee, GAS_PRICE_PER_PUBDATA := getBaseFee(L1_GAS_PRICE, FAIR_L2_GAS_PRICE) @@ -3864,6 +3936,8 @@ object "Bootloader" { let SHOULD_SET_NEW_BATCH := mload(224) + upgradeSystemContextIfNeeded() + switch SHOULD_SET_NEW_BATCH case 0 { unsafeOverrideBatch(NEW_BATCH_TIMESTAMP, NEW_BATCH_NUMBER, EXPECTED_BASE_FEE) diff --git a/etc/system-contracts/bootloader/tests/README.md b/etc/system-contracts/bootloader/tests/README.md new file mode 100644 index 00000000..31acb0ec --- /dev/null +++ b/etc/system-contracts/bootloader/tests/README.md @@ -0,0 +1,23 @@ +# Testing + +## Full tests + +`dummy.yul` and `transfer_tests.yul` are full Yul files, which are replacing the bootloader, and are used in +`zksync-era` crate. + +## Unittests + +Please put bootloader unittests in `bootloader/bootloader_test.yul` file, and any testing utility functions in +`utils/test_utils.yul`. + +To execute tests, you should first run yarn to prepare the source code: + +```shell +yarn preprocess && yarn compile-yul +``` + +And then run the test framework: + +```shell +cd test_infa && cargo run +``` diff --git a/etc/system-contracts/bootloader/tests/bootloader/bootloader_test.yul b/etc/system-contracts/bootloader/tests/bootloader/bootloader_test.yul new file mode 100644 index 00000000..cd41c45d --- /dev/null +++ b/etc/system-contracts/bootloader/tests/bootloader/bootloader_test.yul @@ -0,0 +1,52 @@ +function TEST_safeSub() { + testing_assertEq(safeSub(10, 7, "err"), 3, "Failed to subtract 7") + testing_assertEq(safeSub(10, 8, "err"), 2, "Failed to subtract 8") +} + +function TEST_safeDiv() { + testing_assertEq(safeDiv(4, 2, "err"), 2, "Simple division") + testing_assertEq(safeDiv(5, 2, "err"), 2, "Rouding") + testing_assertEq(safeDiv(5, 3, "err"), 1, "Rouding down") + testing_assertEq(safeDiv(4, 3, "err"), 1, "Rouding down") + testing_assertEq(safeDiv(0, 3, "err"), 0, "Rouding down") +} +function TEST_safeDivAssert() { + testing_testWillFailWith("divByZero") + safeDiv(4, 0, "divByZero") +} + +function TEST_asserts() { + testing_testWillFailWith("willFail") + safeSub(10, 12, "willFail") +} + +function TEST_safeMul() { + testing_assertEq(safeMul(4, 2, "err"), 8, "Simple") + testing_assertEq(safeMul(0, 2, "err"), 0, "With zero") + testing_assertEq(safeMul(0, 0, "err"), 0, "With zero") + testing_assertEq(safeMul(2, 0, "err"), 0, "With zero") +} + +function TEST_safeMulAssert() { + testing_testWillFailWith("overflow") + let left := shl(129, 1) + testing_log("left", left) + safeMul(left, left, "overflow") +} + +// function TEST_should ignore + +function TEST_strLen() { + testing_assertEq(getStrLen("abcd"), 4, "short string") + testing_assertEq(getStrLen("00"), 2, "0 filled string") + testing_assertEq(getStrLen(""), 0, "empty string") + testing_assertEq(getStrLen("12345678901234567890123456789012"), 32, "max length") + testing_assertEq(getStrLen("1234567890123456789012345678901234"), 0, "over max length") +} + +function TEST_simple_transaction() { + // We'll test the transaction from 0.json + let txDataOffset := testing_txDataOffset(0) + let innerTxDataOffset := add(txDataOffset, 0x20) + testing_assertEq(getGasPerPubdataByteLimit(innerTxDataOffset), 0xc350, "Invalid pubdata limit") +} diff --git a/etc/system-contracts/bootloader/tests/utils/test_utils.yul b/etc/system-contracts/bootloader/tests/utils/test_utils.yul new file mode 100644 index 00000000..561a4679 --- /dev/null +++ b/etc/system-contracts/bootloader/tests/utils/test_utils.yul @@ -0,0 +1,55 @@ + + +// We're locating the test hooks 'before' the last free slot. +function TEST_HOOK_PTR() -> ret { + ret := LAST_FREE_SLOT() +} + +function TEST_HOOK_PARAMS_OFFSET() -> ret { + ret := sub(TEST_HOOK_PTR(), mul(5, 32)) +} + +function setTestHook(hook) { + mstore(TEST_HOOK_PTR(), unoptimized(hook)) +} + +function storeTestHookParam(paramId, value) { + let offset := add(TEST_HOOK_PARAMS_OFFSET(), mul(32, paramId)) + mstore(offset, unoptimized(value)) +} + + +function testing_log(msg, data) { + storeTestHookParam(0, nonOptimized(msg)) + storeTestHookParam(1, nonOptimized(data)) + setTestHook(nonOptimized(100)) +} + +function testing_start(test_name) { + storeTestHookParam(0, nonOptimized(test_name)) + setTestHook(nonOptimized(104)) +} + +function testing_assertEq(a, b, message) { + if iszero(eq(a, b)) { + storeTestHookParam(0, nonOptimized(a)) + storeTestHookParam(1, nonOptimized(b)) + storeTestHookParam(2, nonOptimized(message)) + setTestHook(nonOptimized(101)) + } +} + +function testing_testWillFailWith(message) { + storeTestHookParam(0, unoptimized(message)) + setTestHook(nonOptimized(102)) +} +function testing_totalTests(tests) { + storeTestHookParam(0, unoptimized(tests)) + setTestHook(nonOptimized(103)) +} + +// Returns txDataOffset for the index transaction. +function testing_txDataOffset(index) -> txDataOffset { + let txPtr := add(TX_DESCRIPTION_BEGIN_BYTE(), mul(index, TX_DESCRIPTION_SIZE())) + txDataOffset := mload(add(txPtr, 0x20)) +} diff --git a/etc/system-contracts/contracts/AccountCodeStorage.sol b/etc/system-contracts/contracts/AccountCodeStorage.sol index 21a2311b..d5027f2f 100644 --- a/etc/system-contracts/contracts/AccountCodeStorage.sol +++ b/etc/system-contracts/contracts/AccountCodeStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IAccountCodeStorage.sol"; import "./libraries/Utils.sol"; diff --git a/etc/system-contracts/contracts/BootloaderUtilities.sol b/etc/system-contracts/contracts/BootloaderUtilities.sol index 5a73eb2f..49467bdc 100644 --- a/etc/system-contracts/contracts/BootloaderUtilities.sol +++ b/etc/system-contracts/contracts/BootloaderUtilities.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IBootloaderUtilities.sol"; import "./libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/ComplexUpgrader.sol b/etc/system-contracts/contracts/ComplexUpgrader.sol index d45ecd57..2f4d886c 100644 --- a/etc/system-contracts/contracts/ComplexUpgrader.sol +++ b/etc/system-contracts/contracts/ComplexUpgrader.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IComplexUpgrader} from "./interfaces/IComplexUpgrader.sol"; import {FORCE_DEPLOYER} from "./Constants.sol"; diff --git a/etc/system-contracts/contracts/Compressor.sol b/etc/system-contracts/contracts/Compressor.sol index 4b11fd39..24aac725 100644 --- a/etc/system-contracts/contracts/Compressor.sol +++ b/etc/system-contracts/contracts/Compressor.sol @@ -1,25 +1,13 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {ICompressor, OPERATION_BITMASK, LENGTH_BITS_OFFSET, MAX_ENUMERATION_INDEX_SIZE} from "./interfaces/ICompressor.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; import {Utils} from "./libraries/Utils.sol"; import {UnsafeBytesCalldata} from "./libraries/UnsafeBytesCalldata.sol"; import {EfficientCall} from "./libraries/EfficientCall.sol"; -import { - L1_MESSENGER_CONTRACT, - INITIAL_WRITE_STARTING_POSITION, - COMPRESSED_INITIAL_WRITE_SIZE, - STATE_DIFF_ENTRY_SIZE, - STATE_DIFF_ENUM_INDEX_OFFSET, - STATE_DIFF_FINAL_VALUE_OFFSET, - STATE_DIFF_DERIVED_KEY_OFFSET, - DERIVED_KEY_LENGTH, - VALUE_LENGTH, - ENUM_INDEX_LENGTH, - KNOWN_CODE_STORAGE_CONTRACT -} from "./Constants.sol"; +import {L1_MESSENGER_CONTRACT, INITIAL_WRITE_STARTING_POSITION, COMPRESSED_INITIAL_WRITE_SIZE, STATE_DIFF_ENTRY_SIZE, STATE_DIFF_ENUM_INDEX_OFFSET, STATE_DIFF_FINAL_VALUE_OFFSET, STATE_DIFF_DERIVED_KEY_OFFSET, DERIVED_KEY_LENGTH, VALUE_LENGTH, ENUM_INDEX_LENGTH, KNOWN_CODE_STORAGE_CONTRACT} from "./Constants.sol"; /** * @author Matter Labs @@ -96,7 +84,7 @@ contract Compressor is ICompressor, ISystemContract { /// - 2 bytes: number of initial writes /// - N bytes initial writes /// - 32 bytes derived key - /// - 1 byte metadata: + /// - 1 byte metadata: /// - first 5 bits: length in bytes of compressed value /// - last 3 bits: operation /// - 0 -> Nothing (32 bytes) @@ -106,7 +94,7 @@ contract Compressor is ICompressor, ISystemContract { /// - Len Bytes: Compressed Value /// - M bytes repeated writes /// - {_enumerationIndexSize} bytes for enumeration index - /// - 1 byte metadata: + /// - 1 byte metadata: /// - first 5 bits: length in bytes of compressed value /// - last 3 bits: operation /// - 0 -> Nothing (32 bytes) @@ -120,8 +108,8 @@ contract Compressor is ICompressor, ISystemContract { bytes calldata _stateDiffs, bytes calldata _compressedStateDiffs ) external payable onlyCallFrom(address(L1_MESSENGER_CONTRACT)) returns (bytes32 stateDiffHash) { - // We do not enforce the operator to use the optimal, i.e. the minimally possible _enumerationIndexSize. - // We do enforce however, that the _enumerationIndexSize is not larger than 8 bytes long, which is the + // We do not enforce the operator to use the optimal, i.e. the minimally possible _enumerationIndexSize. + // We do enforce however, that the _enumerationIndexSize is not larger than 8 bytes long, which is the // maximal ever possible size for enumeration index. require(_enumerationIndexSize <= MAX_ENUMERATION_INDEX_SIZE, "enumeration index size is too large"); @@ -144,7 +132,7 @@ contract Compressor is ICompressor, ISystemContract { bytes32 derivedKey = stateDiff.readBytes32(52); uint256 initValue = stateDiff.readUint256(92); uint256 finalValue = stateDiff.readUint256(124); - require(derivedKey == _compressedStateDiffs.readBytes32(stateDiffPtr), "iw: initial key mismatch"); + require(derivedKey == _compressedStateDiffs.readBytes32(stateDiffPtr), "iw: initial key mismatch"); stateDiffPtr += 32; uint8 metadata = uint8(bytes1(_compressedStateDiffs[stateDiffPtr])); @@ -172,7 +160,9 @@ contract Compressor is ICompressor, ISystemContract { uint256 initValue = stateDiff.readUint256(92); uint256 finalValue = stateDiff.readUint256(124); - uint256 compressedEnumIndex = _sliceToUint256(_compressedStateDiffs[stateDiffPtr:stateDiffPtr + _enumerationIndexSize]); + uint256 compressedEnumIndex = _sliceToUint256( + _compressedStateDiffs[stateDiffPtr:stateDiffPtr + _enumerationIndexSize] + ); require(enumIndex == compressedEnumIndex, "rw: enum key mismatch"); stateDiffPtr += _enumerationIndexSize; @@ -214,7 +204,7 @@ contract Compressor is ICompressor, ISystemContract { /// @param _initialValue Previous value of key/enumeration index. /// @param _finalValue Updated value of key/enumeration index. /// @param _operation The operation that was performed on value. - /// @param _compressedValue The slice of calldata with compressed value either representing the final + /// @param _compressedValue The slice of calldata with compressed value either representing the final /// value or difference between initial and final value. It should be of arbitrary length less than or equal to 32 bytes. /// @dev It is the responsibility of the caller of this function to ensure that the `_compressedValue` has length no longer than 32 bytes. /// @dev Operation id mapping: @@ -234,9 +224,15 @@ contract Compressor is ICompressor, ISystemContract { if (_operation == 0 || _operation == 3) { require(convertedValue == _finalValue, "transform or no compression: compressed and final mismatch"); } else if (_operation == 1) { - require(_initialValue + convertedValue == _finalValue, "add: initial plus converted not equal to final"); + require( + _initialValue + convertedValue == _finalValue, + "add: initial plus converted not equal to final" + ); } else if (_operation == 2) { - require(_initialValue - convertedValue == _finalValue, "sub: initial minus converted not equal to final"); + require( + _initialValue - convertedValue == _finalValue, + "sub: initial minus converted not equal to final" + ); } else { revert("unsupported operation"); } diff --git a/etc/system-contracts/contracts/Constants.sol b/etc/system-contracts/contracts/Constants.sol index 507d3437..f0896710 100644 --- a/etc/system-contracts/contracts/Constants.sol +++ b/etc/system-contracts/contracts/Constants.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; -import {IAccountCodeStorage} from "./interfaces/IAccountCodeStorage.sol"; +import {IAccountCodeStorage} from "./interfaces/IAccountCodeStorage.sol"; import {INonceHolder} from "./interfaces/INonceHolder.sol"; import {IContractDeployer} from "./interfaces/IContractDeployer.sol"; import {IKnownCodesStorage} from "./interfaces/IKnownCodesStorage.sol"; @@ -27,12 +27,10 @@ address constant SHA256_SYSTEM_CONTRACT = address(0x02); address constant ECADD_SYSTEM_CONTRACT = address(0x06); address constant ECMUL_SYSTEM_CONTRACT = address(0x07); -/// @dev The current maximum deployed precompile address. -/// Note: currently only two precompiles are deployed: -/// 0x01 - ecrecover -/// 0x02 - sha256 -/// Important! So the constant should be updated if more precompiles are deployed. -uint256 constant CURRENT_MAX_PRECOMPILE_ADDRESS = uint256(uint160(SHA256_SYSTEM_CONTRACT)); +/// @dev The maximal possible address of an L1-like precompie. These precompiles maintain the following properties: +/// - Their extcodehash is EMPTY_STRING_KECCAK +/// - Their extcodesize is 0 despite having a bytecode formally deployed there. +uint256 constant CURRENT_MAX_PRECOMPILE_ADDRESS = 0xff; address payable constant BOOTLOADER_FORMAL_ADDRESS = payable(address(SYSTEM_CONTRACTS_OFFSET + 0x01)); IAccountCodeStorage constant ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT = IAccountCodeStorage( @@ -97,7 +95,7 @@ enum SystemLogKey { EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY } -/// @dev The number of leaves in the L2->L1 log Merkle tree. +/// @dev The number of leaves in the L2->L1 log Merkle tree. /// While formally a tree of any length is acceptable, the node supports only a constant length of 2048 leaves. uint256 constant L2_TO_L1_LOGS_MERKLE_TREE_LEAVES = 2048; diff --git a/etc/system-contracts/contracts/ContractDeployer.sol b/etc/system-contracts/contracts/ContractDeployer.sol index ed6d3fc2..50af9742 100644 --- a/etc/system-contracts/contracts/ContractDeployer.sol +++ b/etc/system-contracts/contracts/ContractDeployer.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {ImmutableData} from "./interfaces/IImmutableSimulator.sol"; import {IContractDeployer} from "./interfaces/IContractDeployer.sol"; -import {CREATE2_PREFIX, CREATE_PREFIX, NONCE_HOLDER_SYSTEM_CONTRACT, ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT, FORCE_DEPLOYER, MAX_SYSTEM_CONTRACT_ADDRESS, KNOWN_CODE_STORAGE_CONTRACT, ETH_TOKEN_SYSTEM_CONTRACT, IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT, COMPLEX_UPGRADER_CONTRACT} from "./Constants.sol"; +import {CREATE2_PREFIX, CREATE_PREFIX, NONCE_HOLDER_SYSTEM_CONTRACT, ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT, FORCE_DEPLOYER, MAX_SYSTEM_CONTRACT_ADDRESS, KNOWN_CODE_STORAGE_CONTRACT, ETH_TOKEN_SYSTEM_CONTRACT, IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT, COMPLEX_UPGRADER_CONTRACT, KECCAK256_SYSTEM_CONTRACT} from "./Constants.sol"; import {Utils} from "./libraries/Utils.sol"; import {EfficientCall} from "./libraries/EfficientCall.sol"; @@ -44,7 +44,10 @@ contract ContractDeployer is IContractDeployer, ISystemContract { } // It is an EOA, it is still an account. - if (ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT.getRawCodeHash(_address) == 0) { + if ( + _address > address(MAX_SYSTEM_CONTRACT_ADDRESS) && + ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT.getRawCodeHash(_address) == 0 + ) { return AccountAbstractionVersion.Version1; } @@ -214,6 +217,9 @@ contract ContractDeployer is IContractDeployer, ISystemContract { function forceDeployOnAddress(ForceDeployment calldata _deployment, address _sender) external payable onlySelf { _ensureBytecodeIsKnown(_deployment.bytecodeHash); + // Since the `forceDeployOnAddress` function is called only during upgrades, the Governance is trusted to correctly select + // the addresses to deploy the new bytecodes to and to assess whether overriding the AccountInfo for the "force-deployed" + // contract is acceptable. AccountInfo memory newAccountInfo; newAccountInfo.supportedAAVersion = AccountAbstractionVersion.None; // Accounts have sequential nonces by default. @@ -228,8 +234,23 @@ contract ContractDeployer is IContractDeployer, ISystemContract { false, _deployment.callConstructor ); + } - emit ContractDeployed(_sender, _deployment.bytecodeHash, _deployment.newAddress); + /// @notice The method that is temporarily needed to upgrade the Keccak256 precompile. It is to be removed in the + /// future. Unlike a normal forced deployment, it does not update account information as it requires updating a + /// mapping, and so requires Keccak256 precompile to work already. + /// @dev This method expects the sender (FORCE_DEPLOYER) to provide the correct bytecode hash for the Keccak256 + /// precompile. + function forceDeployKeccak256(bytes32 _keccak256BytecodeHash) external payable onlyCallFrom(FORCE_DEPLOYER) { + _ensureBytecodeIsKnown(_keccak256BytecodeHash); + _constructContract( + msg.sender, + address(KECCAK256_SYSTEM_CONTRACT), + _keccak256BytecodeHash, + msg.data[0:0], + false, + false + ); } /// @notice This method is to be used only during an upgrade to set bytecodes on specific addresses. @@ -295,7 +316,6 @@ contract ContractDeployer is IContractDeployer, ISystemContract { _storeAccountInfo(_newAddress, newAccountInfo); _constructContract(msg.sender, _newAddress, _bytecodeHash, _input, false, true); - emit ContractDeployed(msg.sender, _bytecodeHash, _newAddress); } /// @notice Check that bytecode hash is marked as known on the `KnownCodeStorage` system contracts @@ -352,5 +372,7 @@ contract ContractDeployer is IContractDeployer, ISystemContract { // If we do not call the constructor, we need to set the constructed code hash. ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT.storeAccountConstructedCodeHash(_newAddress, _bytecodeHash); } + + emit ContractDeployed(_sender, _bytecodeHash, _newAddress); } } diff --git a/etc/system-contracts/contracts/DefaultAccount.sol b/etc/system-contracts/contracts/DefaultAccount.sol index 0021839e..2257269d 100644 --- a/etc/system-contracts/contracts/DefaultAccount.sol +++ b/etc/system-contracts/contracts/DefaultAccount.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IAccount.sol"; import "./libraries/TransactionHelper.sol"; @@ -101,8 +101,6 @@ contract DefaultAccount is IAccount { if (_isValidSignature(txHash, _transaction.signature)) { magic = ACCOUNT_VALIDATION_SUCCESS_MAGIC; - } else { - magic = bytes4(0); } } @@ -219,7 +217,7 @@ contract DefaultAccount is IAccount { _transaction.processPaymasterInput(); } - fallback() external payable { + fallback() external payable ignoreInDelegateCall { // fallback of default account shouldn't be called by bootloader under no circumstances assert(msg.sender != BOOTLOADER_FORMAL_ADDRESS); diff --git a/etc/system-contracts/contracts/EmptyContract.sol b/etc/system-contracts/contracts/EmptyContract.sol index 711f8ba1..f0304beb 100644 --- a/etc/system-contracts/contracts/EmptyContract.sol +++ b/etc/system-contracts/contracts/EmptyContract.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/EventWriter.yul b/etc/system-contracts/contracts/EventWriter.yul index ea944457..4cd4a381 100644 --- a/etc/system-contracts/contracts/EventWriter.yul +++ b/etc/system-contracts/contracts/EventWriter.yul @@ -6,7 +6,9 @@ * The rest of the data is passed via calldata without copying. */ object "EventWriter" { - code { } + code { + return(0, 0) + } object "EventWriter_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/ImmutableSimulator.sol b/etc/system-contracts/contracts/ImmutableSimulator.sol index 54fb4c9d..a018c92a 100644 --- a/etc/system-contracts/contracts/ImmutableSimulator.sol +++ b/etc/system-contracts/contracts/ImmutableSimulator.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IImmutableSimulator.sol"; import {DEPLOYER_SYSTEM_CONTRACT} from "./Constants.sol"; diff --git a/etc/system-contracts/contracts/KnownCodesStorage.sol b/etc/system-contracts/contracts/KnownCodesStorage.sol index 29006389..2dda7854 100644 --- a/etc/system-contracts/contracts/KnownCodesStorage.sol +++ b/etc/system-contracts/contracts/KnownCodesStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IKnownCodesStorage} from "./interfaces/IKnownCodesStorage.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; diff --git a/etc/system-contracts/contracts/L1Messenger.sol b/etc/system-contracts/contracts/L1Messenger.sol index c5a03c8d..47ee3265 100644 --- a/etc/system-contracts/contracts/L1Messenger.sol +++ b/etc/system-contracts/contracts/L1Messenger.sol @@ -1,21 +1,13 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IL1Messenger, L2ToL1Log, L2_L1_LOGS_TREE_DEFAULT_LEAF_HASH, L2_TO_L1_LOG_SERIALIZE_SIZE, STATE_DIFF_COMPRESSION_VERSION_NUMBER} from "./interfaces/IL1Messenger.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; import {SystemContractHelper} from "./libraries/SystemContractHelper.sol"; import {EfficientCall} from "./libraries/EfficientCall.sol"; import {Utils} from "./libraries/Utils.sol"; -import { - SystemLogKey, - SYSTEM_CONTEXT_CONTRACT, - KNOWN_CODE_STORAGE_CONTRACT, - COMPRESSOR_CONTRACT, - STATE_DIFF_ENTRY_SIZE, - MAX_ALLOWED_PUBDATA_PER_BATCH, - L2_TO_L1_LOGS_MERKLE_TREE_LEAVES -} from "./Constants.sol"; +import {SystemLogKey, SYSTEM_CONTEXT_CONTRACT, KNOWN_CODE_STORAGE_CONTRACT, COMPRESSOR_CONTRACT, STATE_DIFF_ENTRY_SIZE, MAX_ALLOWED_PUBDATA_PER_BATCH, L2_TO_L1_LOGS_MERKLE_TREE_LEAVES} from "./Constants.sol"; /** * @author Matter Labs @@ -89,8 +81,9 @@ contract L1Messenger is IL1Messenger, ISystemContract { // We need to charge cost of hashing, as it will be used in `publishPubdataAndClearState`: // - keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) and keccakGasCost(64) when reconstructing L2ToL1Log - // - at most 2 times keccakGasCost(64) (as merkle tree can contain ~2*N leaves) - uint256 gasToPay = keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) + 3 * keccakGasCost(64); + // - at most 1 time keccakGasCost(64) when building the Merkle tree (as merkle tree can contain + // ~2*N nodes, where the first N nodes are leaves the hash of which is calculated on the previous step). + uint256 gasToPay = keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) + 2 * keccakGasCost(64); SystemContractHelper.burnGas(Utils.safeCastToU32(gasToPay)); } @@ -149,11 +142,12 @@ contract L1Messenger is IL1Messenger, ISystemContract { // We need to charge cost of hashing, as it will be used in `publishPubdataAndClearState`: // - keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) and keccakGasCost(64) when reconstructing L2ToL1Log // - keccakGasCost(64) and gasSpentOnMessageHashing when reconstructing Messages - // - at most 2 times keccakGasCost(64) (as merkle tree can contain ~2*N leaves) + // - at most 1 time keccakGasCost(64) when building the Merkle tree (as merkle tree can contain + // ~2*N nodes, where the first N nodes are leaves the hash of which is calculated on the previous step). uint256 gasToPay = pubdataLen * gasPerPubdataBytes + keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) + - 4 * + 3 * keccakGasCost(64) + gasSpentOnMessageHashing; SystemContractHelper.burnGas(Utils.safeCastToU32(gasToPay)); @@ -203,7 +197,7 @@ contract L1Messenger is IL1Messenger, ISystemContract { /// Check logs uint32 numberOfL2ToL1Logs = uint32(bytes4(_totalL2ToL1PubdataAndStateDiffs[calldataPtr:calldataPtr + 4])); - require(numberOfL2ToL1Logs <= numberOfL2ToL1Logs, "Too many L2->L1 logs"); + require(numberOfL2ToL1Logs <= L2_TO_L1_LOGS_MERKLE_TREE_LEAVES, "Too many L2->L1 logs"); calldataPtr += 4; bytes32[] memory l2ToL1LogsTreeArray = new bytes32[](L2_TO_L1_LOGS_MERKLE_TREE_LEAVES); @@ -278,7 +272,7 @@ contract L1Messenger is IL1Messenger, ISystemContract { /// Check State Diffs /// encoding is as follows: - /// header (1 byte version, 2 bytes total len of compressed, 1 byte enumeration index size, 2 bytes number of initial writes) + /// header (1 byte version, 3 bytes total len of compressed, 1 byte enumeration index size, 2 bytes number of initial writes) /// body (N bytes of initial writes [32 byte derived key || compressed value], M bytes repeated writes [enumeration index || compressed value]) /// encoded state diffs: [20bytes address][32bytes key][32bytes derived key][8bytes enum index][32bytes initial value][32bytes final value] require( diff --git a/etc/system-contracts/contracts/L2EthToken.sol b/etc/system-contracts/contracts/L2EthToken.sol index 6a2ca48e..fbd63ae2 100644 --- a/etc/system-contracts/contracts/L2EthToken.sol +++ b/etc/system-contracts/contracts/L2EthToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IEthToken} from "./interfaces/IEthToken.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; diff --git a/etc/system-contracts/contracts/MsgValueSimulator.sol b/etc/system-contracts/contracts/MsgValueSimulator.sol index 6a6a9d9f..07ed23d4 100644 --- a/etc/system-contracts/contracts/MsgValueSimulator.sol +++ b/etc/system-contracts/contracts/MsgValueSimulator.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./libraries/Utils.sol"; import "./libraries/EfficientCall.sol"; diff --git a/etc/system-contracts/contracts/NonceHolder.sol b/etc/system-contracts/contracts/NonceHolder.sol index f5a08a6b..b2775f1c 100644 --- a/etc/system-contracts/contracts/NonceHolder.sol +++ b/etc/system-contracts/contracts/NonceHolder.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/INonceHolder.sol"; import "./interfaces/IContractDeployer.sol"; @@ -132,8 +132,11 @@ contract NonceHolder is INonceHolder, ISystemContract { /// @notice Increments the deployment nonce for the account and returns the previous one. /// @param _address The address of the account which to return the deploy nonce for. /// @return prevDeploymentNonce The deployment nonce at the time this function is called. - function incrementDeploymentNonce(address _address) external onlySystemCall returns (uint256 prevDeploymentNonce) { - require(msg.sender == address(DEPLOYER_SYSTEM_CONTRACT), ""); + function incrementDeploymentNonce(address _address) external returns (uint256 prevDeploymentNonce) { + require( + msg.sender == address(DEPLOYER_SYSTEM_CONTRACT), + "Only the contract deployer can increment the deployment nonce" + ); uint256 addressAsKey = uint256(uint160(_address)); uint256 oldRawNonce = rawNonces[addressAsKey]; diff --git a/etc/system-contracts/contracts/SystemContext.sol b/etc/system-contracts/contracts/SystemContext.sol index ad20d4bb..67f9248e 100644 --- a/etc/system-contracts/contracts/SystemContext.sol +++ b/etc/system-contracts/contracts/SystemContext.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {ISystemContext} from "./interfaces/ISystemContext.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; @@ -216,14 +216,14 @@ contract SystemContext is ISystemContext, ISystemContextDeprecated, ISystemContr require(_l2BlockNumber > 0, "L2 block number is never expected to be zero"); unchecked { - bytes32 correctPrevBlockHash = _calculateLegacyL2BlockHash(uint128(_l2BlockNumber - 1)); + bytes32 correctPrevBlockHash = _calculateLegacyL2BlockHash(_l2BlockNumber - 1); require(correctPrevBlockHash == _expectedPrevL2BlockHash, "The previous L2 block hash is incorrect"); // Whenever we'll be queried about the hashes of the blocks before the upgrade, // we'll use batches' hashes, so we don't need to store 256 previous hashes. // However, we do need to store the last previous hash in order to be able to correctly calculate the // hash of the new L2 block. - _setL2BlockHash(uint128(_l2BlockNumber - 1), correctPrevBlockHash); + _setL2BlockHash(_l2BlockNumber - 1, correctPrevBlockHash); } } @@ -382,7 +382,6 @@ contract SystemContext is ISystemContext, ISystemContextDeprecated, ISystemContr // The structure of the "setNewBatch" implies that currentBatchNumber > 0, but we still double check it require(currentBatchNumber > 0, "The current batch number must be greater than 0"); - bytes32 prevBatchHash = batchHash[currentBatchNumber - 1]; // In order to spend less pubdata, the packed version is published uint256 packedTimestamps = (uint256(currentBatchTimestamp) << 128) | currentL2BlockTimestamp; diff --git a/etc/system-contracts/contracts/interfaces/IAccount.sol b/etc/system-contracts/contracts/interfaces/IAccount.sol index cb54f313..3ee3f616 100644 --- a/etc/system-contracts/contracts/interfaces/IAccount.sol +++ b/etc/system-contracts/contracts/interfaces/IAccount.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol b/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol index 977e7e16..c266774e 100644 --- a/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol +++ b/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IAccountCodeStorage { function storeAccountConstructingCodeHash(address _address, bytes32 _hash) external; diff --git a/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol b/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol index 16cfc7cf..e995295e 100644 --- a/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol +++ b/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol b/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol index 91095cfc..ebc26dd2 100644 --- a/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol +++ b/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IComplexUpgrader { function upgrade(address _delegateTo, bytes calldata _calldata) external payable; diff --git a/etc/system-contracts/contracts/interfaces/ICompressor.sol b/etc/system-contracts/contracts/interfaces/ICompressor.sol index 602cb70b..16e02d97 100644 --- a/etc/system-contracts/contracts/interfaces/ICompressor.sol +++ b/etc/system-contracts/contracts/interfaces/ICompressor.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; // The bitmask by applying which to the compressed state diff metadata we retrieve its operation. uint8 constant OPERATION_BITMASK = 7; diff --git a/etc/system-contracts/contracts/interfaces/IContractDeployer.sol b/etc/system-contracts/contracts/interfaces/IContractDeployer.sol index d21b917d..3f84672d 100644 --- a/etc/system-contracts/contracts/interfaces/IContractDeployer.sol +++ b/etc/system-contracts/contracts/interfaces/IContractDeployer.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IContractDeployer { /// @notice Defines the version of the account abstraction protocol diff --git a/etc/system-contracts/contracts/interfaces/IEthToken.sol b/etc/system-contracts/contracts/interfaces/IEthToken.sol index 5543d931..ec9b399f 100644 --- a/etc/system-contracts/contracts/interfaces/IEthToken.sol +++ b/etc/system-contracts/contracts/interfaces/IEthToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IEthToken { function balanceOf(uint256) external view returns (uint256); diff --git a/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol b/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol index 650f47d8..d30ac9b9 100644 --- a/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol +++ b/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; struct ImmutableData { uint256 index; diff --git a/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol b/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol index 075ad95f..b5a783ba 100644 --- a/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol +++ b/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IKnownCodesStorage { event MarkedAsKnown(bytes32 indexed bytecodeHash, bool indexed sendBytecodeToL1); diff --git a/etc/system-contracts/contracts/interfaces/IL1Messenger.sol b/etc/system-contracts/contracts/interfaces/IL1Messenger.sol index 05919edb..ab6a670f 100644 --- a/etc/system-contracts/contracts/interfaces/IL1Messenger.sol +++ b/etc/system-contracts/contracts/interfaces/IL1Messenger.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /// @dev The log passed from L2 /// @param l2ShardId The shard identifier, 0 - rollup, 1 - porter. All other values are not used but are reserved for the future diff --git a/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol b/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol index 5edb43c2..3d75c8ed 100644 --- a/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol +++ b/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IL2StandardToken { event BridgeMint(address indexed _account, uint256 _amount); diff --git a/etc/system-contracts/contracts/interfaces/IMailbox.sol b/etc/system-contracts/contracts/interfaces/IMailbox.sol index b82305fc..ba673058 100644 --- a/etc/system-contracts/contracts/interfaces/IMailbox.sol +++ b/etc/system-contracts/contracts/interfaces/IMailbox.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IMailbox { function finalizeEthWithdrawal( diff --git a/etc/system-contracts/contracts/interfaces/INonceHolder.sol b/etc/system-contracts/contracts/interfaces/INonceHolder.sol index ebddfb04..1213fbea 100644 --- a/etc/system-contracts/contracts/interfaces/INonceHolder.sol +++ b/etc/system-contracts/contracts/interfaces/INonceHolder.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/IPaymaster.sol b/etc/system-contracts/contracts/interfaces/IPaymaster.sol index cc151935..928f19ed 100644 --- a/etc/system-contracts/contracts/interfaces/IPaymaster.sol +++ b/etc/system-contracts/contracts/interfaces/IPaymaster.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol b/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol index dc1b849f..59352f23 100644 --- a/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol +++ b/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/ISystemContext.sol b/etc/system-contracts/contracts/interfaces/ISystemContext.sol index 096243f6..d8a98292 100644 --- a/etc/system-contracts/contracts/interfaces/ISystemContext.sol +++ b/etc/system-contracts/contracts/interfaces/ISystemContext.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol b/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol index 6a647c7e..b51faeed 100644 --- a/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol +++ b/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/ISystemContract.sol b/etc/system-contracts/contracts/interfaces/ISystemContract.sol index 7a66587a..c486abc9 100644 --- a/etc/system-contracts/contracts/interfaces/ISystemContract.sol +++ b/etc/system-contracts/contracts/interfaces/ISystemContract.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {SystemContractHelper} from "../libraries/SystemContractHelper.sol"; import {BOOTLOADER_FORMAL_ADDRESS} from "../Constants.sol"; diff --git a/etc/system-contracts/contracts/libraries/EfficientCall.sol b/etc/system-contracts/contracts/libraries/EfficientCall.sol index 16a6b535..22801d6f 100644 --- a/etc/system-contracts/contracts/libraries/EfficientCall.sol +++ b/etc/system-contracts/contracts/libraries/EfficientCall.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./SystemContractHelper.sol"; import "./Utils.sol"; diff --git a/etc/system-contracts/contracts/libraries/RLPEncoder.sol b/etc/system-contracts/contracts/libraries/RLPEncoder.sol index 50da4624..8e32ea9b 100644 --- a/etc/system-contracts/contracts/libraries/RLPEncoder.sol +++ b/etc/system-contracts/contracts/libraries/RLPEncoder.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs * @custom:security-contact security@matterlabs.dev * @notice This library provides RLP encoding functionality. -*/ + */ library RLPEncoder { function encodeAddress(address _val) internal pure returns (bytes memory encoded) { // The size is equal to 20 bytes of the address itself + 1 for encoding bytes length in RLP. diff --git a/etc/system-contracts/contracts/libraries/SystemContractHelper.sol b/etc/system-contracts/contracts/libraries/SystemContractHelper.sol index 2878e423..a66b9670 100644 --- a/etc/system-contracts/contracts/libraries/SystemContractHelper.sol +++ b/etc/system-contracts/contracts/libraries/SystemContractHelper.sol @@ -1,37 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {MAX_SYSTEM_CONTRACT_ADDRESS} from "../Constants.sol"; -import { - SystemContractsCaller, - CalldataForwardingMode, - CALLFLAGS_CALL_ADDRESS, - CODE_ADDRESS_CALL_ADDRESS, - EVENT_WRITE_ADDRESS, - EVENT_INITIALIZE_ADDRESS, - GET_EXTRA_ABI_DATA_ADDRESS, - LOAD_CALLDATA_INTO_ACTIVE_PTR_CALL_ADDRESS, - META_CODE_SHARD_ID_OFFSET, - META_CALLER_SHARD_ID_OFFSET, - META_SHARD_ID_OFFSET, - META_AUX_HEAP_SIZE_OFFSET, - META_HEAP_SIZE_OFFSET, - META_GAS_PER_PUBDATA_BYTE_OFFSET, - MIMIC_CALL_BY_REF_CALL_ADDRESS, - META_CALL_ADDRESS, - MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT, - PTR_CALLDATA_CALL_ADDRESS, - PTR_ADD_INTO_ACTIVE_CALL_ADDRESS, - PTR_SHRINK_INTO_ACTIVE_CALL_ADDRESS, - PTR_PACK_INTO_ACTIVE_CALL_ADDRESS, - RAW_FAR_CALL_BY_REF_CALL_ADDRESS, - PRECOMPILE_CALL_ADDRESS, - SET_CONTEXT_VALUE_CALL_ADDRESS, - SYSTEM_CALL_BY_REF_CALL_ADDRESS, - TO_L1_CALL_ADDRESS -} from "./SystemContractsCaller.sol"; +import {SystemContractsCaller, CalldataForwardingMode, CALLFLAGS_CALL_ADDRESS, CODE_ADDRESS_CALL_ADDRESS, EVENT_WRITE_ADDRESS, EVENT_INITIALIZE_ADDRESS, GET_EXTRA_ABI_DATA_ADDRESS, LOAD_CALLDATA_INTO_ACTIVE_PTR_CALL_ADDRESS, META_CODE_SHARD_ID_OFFSET, META_CALLER_SHARD_ID_OFFSET, META_SHARD_ID_OFFSET, META_AUX_HEAP_SIZE_OFFSET, META_HEAP_SIZE_OFFSET, META_GAS_PER_PUBDATA_BYTE_OFFSET, MIMIC_CALL_BY_REF_CALL_ADDRESS, META_CALL_ADDRESS, MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT, PTR_CALLDATA_CALL_ADDRESS, PTR_ADD_INTO_ACTIVE_CALL_ADDRESS, PTR_SHRINK_INTO_ACTIVE_CALL_ADDRESS, PTR_PACK_INTO_ACTIVE_CALL_ADDRESS, RAW_FAR_CALL_BY_REF_CALL_ADDRESS, PRECOMPILE_CALL_ADDRESS, SET_CONTEXT_VALUE_CALL_ADDRESS, SYSTEM_CALL_BY_REF_CALL_ADDRESS, TO_L1_CALL_ADDRESS} from "./SystemContractsCaller.sol"; uint256 constant UINT32_MASK = 0xffffffff; uint256 constant UINT128_MASK = 0xffffffffffffffffffffffffffffffff; @@ -297,6 +270,8 @@ library SystemContractHelper { function getZkSyncMeta() internal view returns (ZkSyncMeta memory meta) { uint256 metaPacked = getZkSyncMetaBytes(); meta.gasPerPubdataByte = getGasPerPubdataByteFromMeta(metaPacked); + meta.heapSize = getHeapSizeFromMeta(metaPacked); + meta.auxHeapSize = getAuxHeapSizeFromMeta(metaPacked); meta.shardId = getShardIdFromMeta(metaPacked); meta.callerShardId = getCallerShardIdFromMeta(metaPacked); meta.codeShardId = getCodeShardIdFromMeta(metaPacked); diff --git a/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol b/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol index fe35341b..7be17992 100644 --- a/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol +++ b/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8; +pragma solidity 0.8.20; import {MSG_VALUE_SYSTEM_CONTRACT, MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT} from "../Constants.sol"; import "./Utils.sol"; diff --git a/etc/system-contracts/contracts/libraries/TransactionHelper.sol b/etc/system-contracts/contracts/libraries/TransactionHelper.sol index 10065f56..e0578197 100644 --- a/etc/system-contracts/contracts/libraries/TransactionHelper.sol +++ b/etc/system-contracts/contracts/libraries/TransactionHelper.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../openzeppelin/token/ERC20/IERC20.sol"; import "../openzeppelin/token/ERC20/utils/SafeERC20.sol"; diff --git a/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol b/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol index 7beca859..4ce65f5f 100644 --- a/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol +++ b/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/libraries/Utils.sol b/etc/system-contracts/contracts/libraries/Utils.sol index 8e66e35f..a2791520 100644 --- a/etc/system-contracts/contracts/libraries/Utils.sol +++ b/etc/system-contracts/contracts/libraries/Utils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.8.0; +pragma solidity 0.8.20; import "./EfficientCall.sol"; @@ -83,15 +83,15 @@ library Utils { // Note that the length of the bytecode must be provided in 32-byte words. require(_bytecode.length % 32 == 0, "po"); - uint256 bytecodeLenInWords = _bytecode.length / 32; - require(bytecodeLenInWords < 2 ** 16, "pp"); // bytecode length must be less than 2^16 words - require(bytecodeLenInWords % 2 == 1, "pr"); // bytecode length in words must be odd + uint256 lengthInWords = _bytecode.length / 32; + require(lengthInWords < 2 ** 16, "pp"); // bytecode length must be less than 2^16 words + require(lengthInWords % 2 == 1, "pr"); // bytecode length in words must be odd hashedBytecode = EfficientCall.sha(_bytecode) & 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // Setting the version of the hash hashedBytecode = (hashedBytecode | bytes32(uint256(1 << 248))); // Setting the length - hashedBytecode = hashedBytecode | bytes32(bytecodeLenInWords << 224); + hashedBytecode = hashedBytecode | bytes32(lengthInWords << 224); } } diff --git a/etc/system-contracts/contracts/precompiles/EcAdd.yul b/etc/system-contracts/contracts/precompiles/EcAdd.yul index 63bfb7ab..bfbac645 100644 --- a/etc/system-contracts/contracts/precompiles/EcAdd.yul +++ b/etc/system-contracts/contracts/precompiles/EcAdd.yul @@ -1,5 +1,7 @@ object "EcAdd" { - code { } + code { + return(0, 0) + } object "EcAdd_deployed" { code { //////////////////////////////////////////////////////////////// @@ -245,7 +247,7 @@ object "EcAdd" { /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. /// @param minuend The minuend in Montgomery form. /// @param subtrahend The subtrahend in Montgomery form. - /// @return ret The result of the Montgomery addition. + /// @return ret The result of the Montgomery subtraction. function montgomerySub(minuend, subtrahend) -> ret { ret := montgomeryAdd(minuend, sub(P(), subtrahend)) } diff --git a/etc/system-contracts/contracts/precompiles/EcMul.yul b/etc/system-contracts/contracts/precompiles/EcMul.yul index efe7eec0..83c45ff0 100644 --- a/etc/system-contracts/contracts/precompiles/EcMul.yul +++ b/etc/system-contracts/contracts/precompiles/EcMul.yul @@ -1,5 +1,7 @@ object "EcMul" { - code { } + code { + return(0, 0) + } object "EcMul_deployed" { code { //////////////////////////////////////////////////////////////// @@ -223,7 +225,7 @@ object "EcMul" { /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_The_REDC_algorithm for further details on the Montgomery multiplication. /// @param minuend The minuend in Montgomery form. /// @param subtrahend The subtrahend in Montgomery form. - /// @return ret The result of the Montgomery addition. + /// @return ret The result of the Montgomery subtraction. function montgomerySub(minuend, subtrahend) -> ret { ret := montgomeryAdd(minuend, sub(P(), subtrahend)) } diff --git a/etc/system-contracts/contracts/precompiles/Ecrecover.yul b/etc/system-contracts/contracts/precompiles/Ecrecover.yul index f2965cbc..d0e5924b 100644 --- a/etc/system-contracts/contracts/precompiles/Ecrecover.yul +++ b/etc/system-contracts/contracts/precompiles/Ecrecover.yul @@ -5,7 +5,9 @@ * @dev It uses `precompileCall` to call the zkEVM built-in precompiles. */ object "Ecrecover" { - code { } + code { + return(0, 0) + } object "Ecrecover_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/precompiles/Keccak256.yul b/etc/system-contracts/contracts/precompiles/Keccak256.yul index 39f92ed3..b078d580 100644 --- a/etc/system-contracts/contracts/precompiles/Keccak256.yul +++ b/etc/system-contracts/contracts/precompiles/Keccak256.yul @@ -7,7 +7,9 @@ * @dev Thus keccak256 precompile circuit operates over padded data to perform efficient sponge round computation. */ object "Keccak256" { - code { } + code { + return(0, 0) + } object "Keccak256_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/precompiles/SHA256.yul b/etc/system-contracts/contracts/precompiles/SHA256.yul index ecb2d0df..fba02d5e 100644 --- a/etc/system-contracts/contracts/precompiles/SHA256.yul +++ b/etc/system-contracts/contracts/precompiles/SHA256.yul @@ -7,7 +7,9 @@ * @dev Thus sha256 precompile circuit operates over padded data to perform efficient sponge round computation. */ object "SHA256" { - code { } + code { + return(0, 0) + } object "SHA256_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/test-contracts/Callable.sol b/etc/system-contracts/contracts/test-contracts/Callable.sol new file mode 100644 index 00000000..e7477e0c --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/Callable.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract Callable { + event Called(uint256 value, bytes data); + + fallback() external payable { + uint256 len; + assembly { + len := calldatasize() + } + bytes memory data = new bytes(len); + assembly { + calldatacopy(add(data, 0x20), 0, len) + } + emit Called(msg.value, data); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/DelegateCaller.sol b/etc/system-contracts/contracts/test-contracts/DelegateCaller.sol new file mode 100644 index 00000000..caa5aae6 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/DelegateCaller.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +contract DelegateCaller { + function delegateCall(address _to) external payable { + assembly { + calldatacopy(0, 0, calldatasize()) + let result := delegatecall(gas(), _to, 0, calldatasize(), 0, 0) + returndatacopy(0, 0, returndatasize()) + switch result + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } +} diff --git a/etc/system-contracts/contracts/test-contracts/Deployable.sol b/etc/system-contracts/contracts/test-contracts/Deployable.sol new file mode 100644 index 00000000..be35861a --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/Deployable.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract Deployable { + event Deployed(uint256 value, bytes data); + + constructor() payable { + uint256 len; + assembly { + len := codesize() + } + bytes memory data = new bytes(len); + assembly { + codecopy(add(data, 0x20), 0, len) + } + emit Deployed(msg.value, data); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol b/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol index 680df42a..b369f9a9 100644 --- a/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol +++ b/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; contract DummyUpgrade { event Upgraded(); diff --git a/etc/system-contracts/contracts/test-contracts/EventWriterTest.sol b/etc/system-contracts/contracts/test-contracts/EventWriterTest.sol new file mode 100644 index 00000000..faf09cd7 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/EventWriterTest.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract EventWriterTest { + event ZeroTopics(bytes data) anonymous; + event OneTopic(bytes data); + event TwoTopics(uint256 indexed topic1, bytes data); + event ThreeTopics(uint256 indexed topic1, uint256 indexed topic2, bytes data); + event FourTopics(uint256 indexed topic1, uint256 indexed topic2, uint256 indexed topic3, bytes data); + + function zeroTopics(bytes calldata data) external { + emit ZeroTopics(data); + } + + function oneTopic(bytes calldata data) external { + emit OneTopic(data); + } + + function twoTopics(uint256 topic1, bytes calldata data) external { + emit TwoTopics(topic1, data); + } + + function threeTopics(uint256 topic1, uint256 topic2, bytes calldata data) external { + emit ThreeTopics(topic1, topic2, data); + } + + function fourTopics(uint256 topic1, uint256 topic2, uint256 topic3, bytes calldata data) external { + emit FourTopics(topic1, topic2, topic3, data); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/MockERC20Approve.sol b/etc/system-contracts/contracts/test-contracts/MockERC20Approve.sol new file mode 100644 index 00000000..c9931389 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/MockERC20Approve.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract MockERC20Approve { + event Approved(address to, uint256 value); + + function approve(address spender, uint256 value) external returns (bool) { + emit Approved(spender, value); + return true; + } + + function allowance(address owner, address spender) external view returns (uint256) { + return 0; + } +} diff --git a/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol b/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol index c8ae0b9d..7cec142e 100644 --- a/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol +++ b/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; contract MockKnownCodesStorage { event MockBytecodePublished(bytes32 indexed bytecodeHash); diff --git a/etc/system-contracts/contracts/test-contracts/MockL1Messenger.sol b/etc/system-contracts/contracts/test-contracts/MockL1Messenger.sol new file mode 100644 index 00000000..b24da511 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/MockL1Messenger.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract MockL1Messenger { + event MockBytecodeL1Published(bytes32 indexed bytecodeHash); + + function requestBytecodeL1Publication(bytes32 _bytecodeHash) external { + emit MockBytecodeL1Published(_bytecodeHash); + } + + // To prevent failing during calls from the bootloader + function sendToL1(bytes calldata) external returns (bytes32) { + return bytes32(0); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/NotSystemCaller.sol b/etc/system-contracts/contracts/test-contracts/NotSystemCaller.sol new file mode 100644 index 00000000..0c85deb6 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/NotSystemCaller.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract NotSystemCaller { + address immutable to; + + constructor(address _to) { + to = _to; + } + + fallback() external payable { + address _to = to; + assembly { + calldatacopy(0, 0, calldatasize()) + + let result := call(gas(), _to, callvalue(), 0, calldatasize(), 0, 0) + + returndatacopy(0, 0, returndatasize()) + + switch result + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } +} diff --git a/etc/system-contracts/contracts/test-contracts/SystemCaller.sol b/etc/system-contracts/contracts/test-contracts/SystemCaller.sol new file mode 100644 index 00000000..58adfce2 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/SystemCaller.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +import {SystemContractsCaller} from "../libraries/SystemContractsCaller.sol"; + +contract SystemCaller { + address immutable to; + + constructor(address _to) { + to = _to; + } + + fallback() external payable { + bytes memory result = SystemContractsCaller.systemCallWithPropagatedRevert( + uint32(gasleft()), + to, + uint128(msg.value), + msg.data + ); + assembly { + return(add(result, 0x20), mload(result)) + } + } +} diff --git a/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol b/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol index 135e2cd7..8eba841d 100644 --- a/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol +++ b/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../Constants.sol"; diff --git a/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol b/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol index 6a114e4b..2f9f7073 100644 --- a/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol +++ b/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8; +pragma solidity 0.8.20; import {MAX_SYSTEM_CONTRACT_ADDRESS, MSG_VALUE_SYSTEM_CONTRACT} from "../Constants.sol"; diff --git a/etc/system-contracts/hardhat.config.ts b/etc/system-contracts/hardhat.config.ts index 5877945a..0ae0329a 100644 --- a/etc/system-contracts/hardhat.config.ts +++ b/etc/system-contracts/hardhat.config.ts @@ -1,50 +1,55 @@ -import '@nomiclabs/hardhat-solpp'; -import '@typechain/hardhat'; -import '@nomiclabs/hardhat-ethers'; -import '@matterlabs/hardhat-zksync-solc'; -import '@matterlabs/hardhat-zksync-chai-matchers'; +import "@matterlabs/hardhat-zksync-chai-matchers"; +import "@matterlabs/hardhat-zksync-solc"; +import "@nomiclabs/hardhat-ethers"; +import "@nomiclabs/hardhat-solpp"; +import "@typechain/hardhat"; -const systemConfig = require('./SystemConfig.json'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const systemConfig = require("./SystemConfig.json"); export default { zksolc: { - version: '1.3.14', - compilerSource: 'binary', + version: "1.3.14", + compilerSource: "binary", settings: { - isSystem: true - } + isSystem: true, + }, }, zkSyncDeploy: { - zkSyncNetwork: 'http://localhost:3050', - ethNetwork: 'http://localhost:8545' + zkSyncNetwork: "http://localhost:3050", + ethNetwork: "http://localhost:8545", }, solidity: { - version: '0.8.17', + version: "0.8.20", settings: { optimizer: { - enabled: true, - runs: 200 + enabled: true, + runs: 9999999, + }, + outputSelection: { + "*": { + "*": ["storageLayout"], + }, }, - viaIR: true - } + }, }, solpp: { defs: (() => { return { ECRECOVER_COST_GAS: systemConfig.ECRECOVER_COST_GAS, KECCAK_ROUND_COST_GAS: systemConfig.KECCAK_ROUND_COST_GAS, - SHA256_ROUND_COST_GAS: systemConfig.SHA256_ROUND_COST_GAS - } - })() + SHA256_ROUND_COST_GAS: systemConfig.SHA256_ROUND_COST_GAS, + }; + })(), }, networks: { hardhat: { - zksync: true + zksync: true, }, zkSyncTestNode: { - url: 'http://127.0.0.1:8011', - ethNetwork: '', - zksync: true - } - } + url: "http://127.0.0.1:8011", + ethNetwork: "", + zksync: true, + }, + }, }; diff --git a/etc/system-contracts/package.json b/etc/system-contracts/package.json index 99bf3576..ad977d73 100644 --- a/etc/system-contracts/package.json +++ b/etc/system-contracts/package.json @@ -8,24 +8,36 @@ "@nomiclabs/hardhat-solpp": "^2.0.1", "commander": "^9.4.1", "ethers": "^5.7.0", - "hardhat": "^2.11.0", + "hardhat": "=2.16.0", "preprocess": "^3.2.0", "zksync-web3": "^0.14.3" }, "devDependencies": { + "@matterlabs/eslint-config-typescript": "^1.1.2", "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.4", "@matterlabs/hardhat-zksync-solc": "^0.4.2", + "@matterlabs/prettier-config": "^1.0.3", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomiclabs/hardhat-ethers": "^2.0.6", "@typechain/ethers-v5": "^10.0.0", "@typechain/hardhat": "^7.0.0", "@types/chai": "^4.3.1", + "@types/lodash": "^4.14.199", "@types/mocha": "^9.1.1", "@types/node": "^17.0.34", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", "chai": "^4.3.6", + "eslint": "^8.51.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-prettier": "^5.0.1", + "lodash": "^4.17.21", + "markdownlint-cli": "^0.33.0", "mocha": "^10.0.0", - "prettier": "^2.3.0", - "prettier-plugin-solidity": "^1.0.0-alpha.27", + "prettier": "^3.0.3", + "prettier-plugin-solidity": "^1.1.3", + "solhint": "^3.6.2", "template-file": "^6.0.1", "ts-generator": "^0.1.1", "ts-node": "^10.7.0", @@ -42,9 +54,25 @@ ] }, "scripts": { - "build": "hardhat compile", - "clean": "hardhat clean", - "preprocess": "rm -rf ./bootloader/build && yarn ts-node scripts/process.ts", - "compile-yul": "ts-node scripts/compile-yul.ts" + "build": "yarn build:sol && yarn build:yul", + "build:sol": "hardhat compile", + "build:yul": "yarn preprocess:yul && yarn compile-yul", + "calculate-hashes:check": "ts-node scripts/calculate-hashes.ts --check-only", + "calculate-hashes:fix": "ts-node scripts/calculate-hashes.ts", + "clean": "yarn clean:sol && yarn clean:yul", + "clean:sol": "hardhat clean", + "clean:yul": "rm -rf ./bootloader/build ./bootloader/tests/artifacts ./contracts/artifacts ./contracts/precompiles/artifacts", + "compile-yul": "ts-node scripts/compile-yul.ts", + "deploy-preimages": "ts-node scripts/deploy-preimages.ts", + "lint:check": "yarn lint:md && yarn lint:sol && yarn lint:ts && yarn prettier:check", + "lint:fix": "yarn lint:md --fix && yarn lint:sol --fix && yarn lint:ts --fix && yarn prettier:fix", + "lint:md": "markdownlint \"**/*.md\"", + "lint:sol": "solhint \"contracts/**/*.sol\"", + "lint:ts": "eslint .", + "preprocess:yul": "rm -rf ./bootloader/build && yarn ts-node scripts/process.ts", + "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yaml}\"", + "prettier:fix": "prettier --write \"**/*.{js,json,md,sol,ts,yaml}\"", + "test": "hardhat test --network zkSyncTestNode", + "test:bootloader": "cd bootloader/test_infra && cargo run" } } diff --git a/etc/system-contracts/scripts/calculate-hashes.ts b/etc/system-contracts/scripts/calculate-hashes.ts new file mode 100644 index 00000000..bc7fb007 --- /dev/null +++ b/etc/system-contracts/scripts/calculate-hashes.ts @@ -0,0 +1,230 @@ +import { ethers } from "ethers"; +import * as fs from "fs"; +import _ from "lodash"; +import os from "os"; +import { join } from "path"; +import { hashBytecode } from "zksync-web3/build/src/utils"; + +type ContractDetails = { + contractName: string; + bytecodePath: string; + sourceCodePath: string; +}; + +type Hashes = { + bytecodeHash: string; + sourceCodeHash: string; +}; + +type SystemContractHashes = ContractDetails & Hashes; + +const findDirsEndingWith = + (endingWith: string) => + (path: string): string[] => { + const absolutePath = makePathAbsolute(path); + try { + const dirs = fs.readdirSync(absolutePath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()); + const dirsEndingWithSol = dirs.filter((dirent) => dirent.name.endsWith(endingWith)); + return dirsEndingWithSol.map((dirent) => dirent.name); + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read directory: ${absolutePath} Error: ${msg}`); + } + }; + +const SOLIDITY_ARTIFACTS_DIR = "artifacts-zk"; + +const getSolidityContractDetails = (dir: string, contractName: string): ContractDetails => { + const bytecodePath = join(SOLIDITY_ARTIFACTS_DIR, dir, contractName + ".sol", contractName + ".json"); + const sourceCodePath = join(dir, contractName + ".sol"); + return { + contractName, + bytecodePath, + sourceCodePath, + }; +}; + +const getSolidityContractsDetails = (dir: string): ContractDetails[] => { + const bytecodesDir = join(SOLIDITY_ARTIFACTS_DIR, dir); + const dirsEndingWithSol = findDirsEndingWith(".sol")(bytecodesDir); + const contractNames = dirsEndingWithSol.map((d) => d.replace(".sol", "")); + const solidityContractsDetails = contractNames.map((c) => getSolidityContractDetails(dir, c)); + return solidityContractsDetails; +}; + +const YUL_ARTIFACTS_DIR = "artifacts"; + +const getYulContractDetails = (dir: string, contractName: string): ContractDetails => { + const bytecodePath = join(dir, YUL_ARTIFACTS_DIR, contractName + ".yul", contractName + ".yul.zbin"); + const sourceCodePath = join(dir, contractName + ".yul"); + return { + contractName, + bytecodePath, + sourceCodePath, + }; +}; + +const getYulContractsDetails = (dir: string): ContractDetails[] => { + const bytecodesDir = join(dir, YUL_ARTIFACTS_DIR); + const dirsEndingWithYul = findDirsEndingWith(".yul")(bytecodesDir); + const contractNames = dirsEndingWithYul.map((d) => d.replace(".yul", "")); + const yulContractsDetails = contractNames.map((c) => getYulContractDetails(dir, c)); + return yulContractsDetails; +}; + +const makePathAbsolute = (path: string): string => { + return join(__dirname, "..", path); +}; + +const readSourceCode = (details: ContractDetails): string => { + const absolutePath = makePathAbsolute(details.sourceCodePath); + try { + return ethers.utils.hexlify(fs.readFileSync(absolutePath)); + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read source code for ${details.contractName}: ${absolutePath} Error: ${msg}`); + } +}; + +const readBytecode = (details: ContractDetails): string => { + const absolutePath = makePathAbsolute(details.bytecodePath); + try { + if (details.bytecodePath.endsWith(".json")) { + const jsonFile = fs.readFileSync(absolutePath, "utf8"); + return ethers.utils.hexlify(JSON.parse(jsonFile).bytecode); + } else { + return ethers.utils.hexlify(fs.readFileSync(absolutePath)); + } + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read bytecode for ${details.contractName}: ${details.bytecodePath} Error: ${msg}`); + } +}; + +const getHashes = (contractName: string, sourceCode: string, bytecode: string): Hashes => { + try { + return { + bytecodeHash: ethers.utils.hexlify(hashBytecode(bytecode)), + // The extra checks performed by the hashBytecode function are not needed for the source code, therefore + // sha256 is used for simplicity + sourceCodeHash: ethers.utils.sha256(sourceCode), + }; + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to calculate hashes for ${contractName} Error: ${msg}`); + } +}; + +const getSystemContractsHashes = (systemContractsDetails: ContractDetails[]): SystemContractHashes[] => + systemContractsDetails.map((contractDetails) => { + const sourceCode = readSourceCode(contractDetails); + const bytecode = readBytecode(contractDetails); + const hashes = getHashes(contractDetails.contractName, sourceCode, bytecode); + + const systemContractHashes: SystemContractHashes = { + ...contractDetails, + ...hashes, + }; + + return systemContractHashes; + }); + +const readSystemContractsHashesFile = (path: string): SystemContractHashes[] => { + const absolutePath = makePathAbsolute(path); + try { + const file = fs.readFileSync(absolutePath, "utf8"); + const parsedFile = JSON.parse(file); + return parsedFile; + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read file: ${absolutePath} Error: ${msg}`); + } +}; + +const saveSystemContractsHashesFile = (path: string, systemContractsHashes: SystemContractHashes[]) => { + const absolutePath = makePathAbsolute(path); + try { + fs.writeFileSync(absolutePath, JSON.stringify(systemContractsHashes, null, 2) + os.EOL); + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to save file: ${absolutePath} Error: ${msg}`); + } +}; + +const findDifferences = (newHashes: SystemContractHashes[], oldHashes: SystemContractHashes[]) => { + const differentElements = _.xorWith(newHashes, oldHashes, _.isEqual); + + const differentUniqueElements = _.uniqWith(differentElements, (a, b) => a.contractName === b.contractName); + + const differencesList = differentUniqueElements.map((diffElem) => { + const newHashesElem = newHashes.find((elem) => elem.contractName === diffElem.contractName); + + const oldHashesElem = oldHashes.find((elem) => elem.contractName === diffElem.contractName); + + const differingFields = _.xorWith( + Object.entries(newHashesElem || {}), + Object.entries(oldHashesElem || {}), + _.isEqual + ); + + const differingFieldsUniqueKeys = _.uniq(differingFields.map(([key]) => key)); + + return { + contract: diffElem.contractName, + differingFields: differingFieldsUniqueKeys, + old: oldHashesElem || {}, + new: newHashesElem || {}, + }; + }); + + return differencesList; +}; + +const SOLIDITY_SOURCE_CODE_PATHS = ["cache-zk/solpp-generated-contracts"]; +const YUL_SOURCE_CODE_PATHS = ["contracts", "contracts/precompiles", "bootloader/build"]; +const OUTPUT_FILE_PATH = "SystemContractsHashes.json"; + +const main = async () => { + const args = process.argv; + if (args.length > 3 || (args.length == 3 && !args.includes("--check-only"))) { + console.log( + "This command can be used with no arguments or with the --check-only flag. Use the --check-only flag to check the hashes without updating the SystemContractsHashes.json file." + ); + process.exit(1); + } + const checkOnly = args.includes("--check-only"); + + const solidityContractsDetails = _.flatten(SOLIDITY_SOURCE_CODE_PATHS.map(getSolidityContractsDetails)); + const yulContractsDetails = _.flatten(YUL_SOURCE_CODE_PATHS.map(getYulContractsDetails)); + const systemContractsDetails = [...solidityContractsDetails, ...yulContractsDetails]; + + const newSystemContractsHashes = getSystemContractsHashes(systemContractsDetails); + const oldSystemContractsHashes = readSystemContractsHashesFile(OUTPUT_FILE_PATH); + if (_.isEqual(newSystemContractsHashes, oldSystemContractsHashes)) { + console.log("Calculated hashes match the hashes in the SystemContractsHashes.json file."); + console.log("Exiting..."); + return; + } + const differences = findDifferences(newSystemContractsHashes, oldSystemContractsHashes); + console.log("Calculated hashes differ from the hashes in the SystemContractsHashes.json file. Differences:"); + console.log(differences); + if (checkOnly) { + console.log("You can use the `yarn calculate-hashes:fix` command to update the SystemContractsHashes.json file."); + console.log("Exiting..."); + process.exit(1); + } else { + console.log("Updating..."); + saveSystemContractsHashesFile(OUTPUT_FILE_PATH, newSystemContractsHashes); + console.log("Update finished"); + console.log("Exiting..."); + return; + } +}; + +main() + .then(() => process.exit(0)) + .catch((err) => { + console.error("Error:", err.message || err); + console.log("Please make sure to run `yarn build` before running this script."); + process.exit(1); + }); diff --git a/etc/system-contracts/scripts/compile-yul.ts b/etc/system-contracts/scripts/compile-yul.ts index e2402e27..15983fcf 100644 --- a/etc/system-contracts/scripts/compile-yul.ts +++ b/etc/system-contracts/scripts/compile-yul.ts @@ -1,35 +1,36 @@ -import * as hre from 'hardhat'; -import * as fs from 'fs'; -import { exec as _exec, spawn as _spawn } from 'child_process'; +import * as hre from "hardhat"; -import { getZksolcUrl, saltFromUrl } from '@matterlabs/hardhat-zksync-solc'; -import { getCompilersDir } from 'hardhat/internal/util/global-dir'; -import path from 'path'; +import { getZksolcUrl, saltFromUrl } from "@matterlabs/hardhat-zksync-solc"; +import { spawn as _spawn } from "child_process"; +import * as fs from "fs"; +import { getCompilersDir } from "hardhat/internal/util/global-dir"; +import path from "path"; -const COMPILER_VERSION = '1.3.14'; +const COMPILER_VERSION = "1.3.14"; const IS_COMPILER_PRE_RELEASE = false; async function compilerLocation(): Promise { const compilersCache = await getCompilersDir(); - let salt = ''; + let salt = ""; if (IS_COMPILER_PRE_RELEASE) { - const url = getZksolcUrl('https://github.com/matter-labs/zksolc-prerelease', hre.config.zksolc.version); + // @ts-ignore + const url = getZksolcUrl("https://github.com/matter-labs/zksolc-prerelease", hre.config.zksolc.version); salt = saltFromUrl(url); } - return path.join(compilersCache, 'zksolc', `zksolc-v${COMPILER_VERSION}${salt ? '-' : ''}${salt}`); + return path.join(compilersCache, "zksolc", `zksolc-v${COMPILER_VERSION}${salt ? "-" : ""}${salt}`); } // executes a command in a new shell // but pipes data to parent's stdout/stderr export function spawn(command: string) { - command = command.replace(/\n/g, ' '); - const child = _spawn(command, { stdio: 'inherit', shell: true }); + command = command.replace(/\n/g, " "); + const child = _spawn(command, { stdio: "inherit", shell: true }); return new Promise((resolve, reject) => { - child.on('error', reject); - child.on('close', (code) => { + child.on("error", reject); + child.on("close", (code) => { code == 0 ? resolve(code) : reject(`Child process exited with code ${code}`); }); }); @@ -40,7 +41,7 @@ export async function compileYul(path: string, files: string[], outputDirName: s console.log(`No test files provided in folder ${path}.`); return; } - let paths = preparePaths(path, files, outputDirName); + const paths = preparePaths(path, files, outputDirName); const zksolcLocation = await compilerLocation(); await spawn( @@ -49,19 +50,21 @@ export async function compileYul(path: string, files: string[], outputDirName: s } export async function compileYulFolder(path: string) { - let files: string[] = (await fs.promises.readdir(path)).filter((fn) => fn.endsWith('.yul')); + const files: string[] = (await fs.promises.readdir(path)).filter((fn) => fn.endsWith(".yul")); for (const file of files) { await compileYul(path, [file], `${file}`); } } - function preparePaths(path: string, files: string[], outputDirName: string | null): CompilerPaths { const filePaths = files - .map((val, _) => { + .map((val) => { return `sources/${val}`; }) - .join(' '); + .join(" "); + const currentWorkingDirectory = process.cwd(); + console.log(`Yarn project directory: ${currentWorkingDirectory}`); + const outputDir = outputDirName || files[0]; // This script is located in `system-contracts/scripts`, so we get one directory back. const absolutePathSources = `${__dirname}/../${path}`; @@ -83,17 +86,16 @@ class CompilerPaths { } } - async function main() { - await compileYulFolder('contracts'); - await compileYulFolder('contracts/precompiles'); - await compileYulFolder('bootloader/build'); - await compileYulFolder('bootloader/tests'); + await compileYulFolder("contracts"); + await compileYulFolder("contracts/precompiles"); + await compileYulFolder("bootloader/build"); + await compileYulFolder("bootloader/tests"); } main() .then(() => process.exit(0)) .catch((err) => { - console.error('Error:', err.message || err); + console.error("Error:", err.message || err); process.exit(1); }); diff --git a/etc/system-contracts/scripts/constants.ts b/etc/system-contracts/scripts/constants.ts index 6ad0ffaa..991f5ef9 100644 --- a/etc/system-contracts/scripts/constants.ts +++ b/etc/system-contracts/scripts/constants.ts @@ -1,11 +1,12 @@ -import { BigNumberish, BytesLike, constants, ethers } from 'ethers'; +import type { BigNumberish, BytesLike } from "ethers"; +import { constants, ethers } from "ethers"; -export const BOOTLOADER_FORMAL_ADDRESS = '0x0000000000000000000000000000000000008001'; +export const BOOTLOADER_FORMAL_ADDRESS = "0x0000000000000000000000000000000000008001"; export const ETH_ADDRESS = constants.AddressZero; export enum Language { - Solidity = 'solidity', - Yul = 'yul' + Solidity = "solidity", + Yul = "yul", } export interface SystemContractDescription { @@ -29,110 +30,122 @@ interface ISystemContracts { export const SYSTEM_CONTRACTS: ISystemContracts = { zeroAddress: { // zero address has EmptyContract code - address: '0x0000000000000000000000000000000000000000', - codeName: 'EmptyContract', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000000000", + codeName: "EmptyContract", + lang: Language.Solidity, }, ecrecover: { - address: '0x0000000000000000000000000000000000000001', - codeName: 'Ecrecover', + address: "0x0000000000000000000000000000000000000001", + codeName: "Ecrecover", lang: Language.Yul, - path: 'precompiles' + path: "precompiles", }, sha256: { - address: '0x0000000000000000000000000000000000000002', - codeName: 'SHA256', + address: "0x0000000000000000000000000000000000000002", + codeName: "SHA256", + lang: Language.Yul, + path: "precompiles", + }, + ecAdd: { + address: "0x0000000000000000000000000000000000000006", + codeName: "EcAdd", lang: Language.Yul, - path: 'precompiles' + path: "precompiles", + }, + ecMul: { + address: "0x0000000000000000000000000000000000000007", + codeName: "EcMul", + lang: Language.Yul, + path: "precompiles", }, bootloader: { // Bootloader has EmptyContract code - address: '0x0000000000000000000000000000000000008001', - codeName: 'EmptyContract', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008001", + codeName: "EmptyContract", + lang: Language.Solidity, }, accountCodeStorage: { - address: '0x0000000000000000000000000000000000008002', - codeName: 'AccountCodeStorage', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008002", + codeName: "AccountCodeStorage", + lang: Language.Solidity, }, nonceHolder: { - address: '0x0000000000000000000000000000000000008003', - codeName: 'NonceHolder', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008003", + codeName: "NonceHolder", + lang: Language.Solidity, }, knownCodesStorage: { - address: '0x0000000000000000000000000000000000008004', - codeName: 'KnownCodesStorage', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008004", + codeName: "KnownCodesStorage", + lang: Language.Solidity, }, immutableSimulator: { - address: '0x0000000000000000000000000000000000008005', - codeName: 'ImmutableSimulator', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008005", + codeName: "ImmutableSimulator", + lang: Language.Solidity, }, contractDeployer: { - address: '0x0000000000000000000000000000000000008006', - codeName: 'ContractDeployer', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008006", + codeName: "ContractDeployer", + lang: Language.Solidity, }, l1Messenger: { - address: '0x0000000000000000000000000000000000008008', - codeName: 'L1Messenger', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008008", + codeName: "L1Messenger", + lang: Language.Solidity, }, msgValueSimulator: { - address: '0x0000000000000000000000000000000000008009', - codeName: 'MsgValueSimulator', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008009", + codeName: "MsgValueSimulator", + lang: Language.Solidity, }, l2EthToken: { - address: '0x000000000000000000000000000000000000800a', - codeName: 'L2EthToken', - lang: Language.Solidity + address: "0x000000000000000000000000000000000000800a", + codeName: "L2EthToken", + lang: Language.Solidity, }, systemContext: { - address: '0x000000000000000000000000000000000000800b', - codeName: 'SystemContext', - lang: Language.Solidity + address: "0x000000000000000000000000000000000000800b", + codeName: "SystemContext", + lang: Language.Solidity, }, bootloaderUtilities: { - address: '0x000000000000000000000000000000000000800c', - codeName: 'BootloaderUtilities', - lang: Language.Solidity + address: "0x000000000000000000000000000000000000800c", + codeName: "BootloaderUtilities", + lang: Language.Solidity, }, eventWriter: { - address: '0x000000000000000000000000000000000000800d', - codeName: 'EventWriter', + address: "0x000000000000000000000000000000000000800d", + codeName: "EventWriter", lang: Language.Yul, - path: '' + path: "", }, compressor: { - address: '0x000000000000000000000000000000000000800e', - codeName: 'Compressor', + address: "0x000000000000000000000000000000000000800e", + codeName: "Compressor", lang: Language.Solidity, }, complexUpgrader: { - address: '0x000000000000000000000000000000000000800f', - codeName: 'ComplexUpgrader', + address: "0x000000000000000000000000000000000000800f", + codeName: "ComplexUpgrader", lang: Language.Solidity, }, keccak256: { - address: '0x0000000000000000000000000000000000008010', - codeName: 'Keccak256', + address: "0x0000000000000000000000000000000000008010", + codeName: "Keccak256", lang: Language.Yul, - path: 'precompiles' - } + path: "precompiles", + }, } as const; export const EIP712_TX_ID = 113; -export const CHAIN_ID = 260; +export const CHAIN_ID = 270; // For now, these types are hardcoded, but maybe it will make sense export const EIP712_DOMAIN = { - name: 'zkSync', - version: '2', - chainId: CHAIN_ID + name: "zkSync", + version: "2", + chainId: CHAIN_ID, // zkSync contract doesn't verify EIP712 signatures. }; @@ -176,38 +189,38 @@ export type Address = string; export const EIP712_TX_TYPE = { Transaction: [ - { name: 'txType', type: 'uint8' }, - { name: 'to', type: 'uint256' }, - { name: 'value', type: 'uint256' }, - { name: 'data', type: 'bytes' }, - { name: 'gasLimit', type: 'uint256' }, - { name: 'gasPerPubdataByteLimit', type: 'uint256' }, - { name: 'gasPrice', type: 'uint256' }, - { name: 'nonce', type: 'uint256' } - ] + { name: "txType", type: "uint8" }, + { name: "to", type: "uint256" }, + { name: "value", type: "uint256" }, + { name: "data", type: "bytes" }, + { name: "gasLimit", type: "uint256" }, + { name: "gasPerPubdataByteLimit", type: "uint256" }, + { name: "gasPrice", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], }; -export type DynamicType = 'bytes' | 'bytes32[]'; -export type FixedType = 'address' | 'uint256' | 'uint128' | 'uint32'; +export type DynamicType = "bytes" | "bytes32[]"; +export type FixedType = "address" | "uint256" | "uint128" | "uint32"; export type FieldType = FixedType | DynamicType; function isDynamicType(x: FieldType): x is DynamicType { - return x == 'bytes' || x == 'bytes32[]'; + return x == "bytes" || x == "bytes32[]"; } function isFixedType(x: FieldType): x is FixedType { return !isDynamicType(x); } -export const TransactionFields: Record = { - txType: 'uint256', - from: 'address', - to: 'address', - gasLimit: 'uint32', - gasPerPubdataByteLimit: 'uint32', - maxFeePerGas: 'uint256', - maxPriorityFeePerGas: 'uint256', - paymaster: 'address', +export const TransactionFields: Record = { + txType: "uint256", + from: "address", + to: "address", + gasLimit: "uint32", + gasPerPubdataByteLimit: "uint32", + maxFeePerGas: "uint256", + maxPriorityFeePerGas: "uint256", + paymaster: "address", // In the future, we might want to add some // new fields to the struct. The `txData` struct // is to be passed to account and any changes to its structure @@ -216,25 +229,25 @@ export const TransactionFields: Record = { // It is also recommended that their length is fixed, since // it would allow easier proof integration (in case we will need // some special circuit for preprocessing transactions). - reserved: Array(6).fill('uint256'), - data: 'bytes', - signature: 'bytes', - factoryDeps: 'bytes32[]', - paymasterInput: 'bytes', + reserved: Array(6).fill("uint256"), + data: "bytes", + signature: "bytes", + factoryDeps: "bytes32[]", + paymasterInput: "bytes", // Reserved dynamic type for the future use-case. Using it should be avoided, // But it is still here, just in case we want to enable some additional functionality. - reservedDynamic: 'bytes' -} + reservedDynamic: "bytes", +}; function capitalize(s: string) { - if(!s.length) { + if (!s.length) { return s; } return `${s[0].toUpperCase()}${s.substring(1)}`; } function memPosFromOffset(offset: number) { - return offset === 0 ? 'innerTxDataOffset' : `add(innerTxDataOffset, ${offset})`; + return offset === 0 ? "innerTxDataOffset" : `add(innerTxDataOffset, ${offset})`; } function getGetterName(fieldName: string) { @@ -242,7 +255,7 @@ function getGetterName(fieldName: string) { } function getPtrGetterName(fieldName: string) { - return `get${capitalize(fieldName)}Ptr`; + return `get${capitalize(fieldName)}Ptr`; } function getGetter(fieldName: string, offset: number) { @@ -252,7 +265,7 @@ function getGetter(fieldName: string, offset: number) { function ${getterName}(innerTxDataOffset) -> ret { ret := mload(${memPos}) } - ` + `; } function getPtrGetter(fieldName: string, offset: number) { @@ -263,12 +276,12 @@ function getPtrGetter(fieldName: string, offset: number) { ret := mload(${memPos}) ret := add(innerTxDataOffset, ret) } - ` + `; } function getTypeValidationMethodName(type: FieldType) { - if(type == 'bytes32[]'){ - return 'validateBytes32Array' + if (type == "bytes32[]") { + return "validateBytes32Array"; } else { return `validate${capitalize(type)}`; } @@ -280,12 +293,12 @@ function getBytesLengthGetterName(fieldName: string): string { function getBytesLengthGetter(fieldName: string, type: DynamicType) { let lengthToBytes: string; - if(type == 'bytes') { - lengthToBytes = `lengthToWords(mload(ptr))`; - } else if(type == 'bytes32[]') { - lengthToBytes = `mul(mload(ptr),32)`; + if (type == "bytes") { + lengthToBytes = "lengthToWords(mload(ptr))"; + } else if (type == "bytes32[]") { + lengthToBytes = "mul(mload(ptr),32)"; } else { - throw new Error(`Type ${type} is not supported`) + throw new Error(`Type ${type} is not supported`); } const getterName = getBytesLengthGetterName(fieldName); @@ -294,14 +307,16 @@ function getBytesLengthGetter(fieldName: string, type: DynamicType) { let ptr := ${getPtrGetterName(fieldName)}(innerTxDataOffset) ret := ${lengthToBytes} } - ` + `; } function getDataLength(baseLength: number, dynamicFields: [string, DynamicType][]) { - const ptrAdders = dynamicFields.map(([fieldName,]) => { - return ` - ret := add(ret, ${getBytesLengthGetterName(fieldName)}(innerTxDataOffset))` - }).join(''); + const ptrAdders = dynamicFields + .map(([fieldName]) => { + return ` + ret := add(ret, ${getBytesLengthGetterName(fieldName)}(innerTxDataOffset))`; + }) + .join(""); return ` function getDataLength(innerTxDataOffset) -> ret { @@ -312,16 +327,16 @@ function getDataLength(baseLength: number, dynamicFields: [string, DynamicType][ ${ptrAdders} } - ` + `; } function validateFixedSizeField(fieldName: string, type: FixedType): string { - if(type == 'uint256') { + if (type == "uint256") { // There is no validation for uint256 - return ``; + return ""; } const assertionErrorStr = getEncodingError(fieldName); - const fieldValue = `${fieldName}Value` + const fieldValue = `${fieldName}Value`; return ` let ${fieldValue} := ${getGetterName(fieldName)}(innerTxDataOffset) if iszero(${getTypeValidationMethodName(type)}(${fieldValue})) { @@ -335,31 +350,33 @@ function getEncodingError(fieldName: string) { // because the maximum length is 32. const assertionError = `Encoding ${fieldName}`; - if(assertionError.length > 32) { - throw new Error(`Assertion str too long: ${assertionError}`) + if (assertionError.length > 32) { + throw new Error(`Assertion str too long: ${assertionError}`); } return assertionError; } function getValidateTxStructure( - fixedFieldsChecks: string, + fixedFieldsChecks: string, fixedLenPart: number, dynamicFields: [string, DynamicType][] ): string { - const dynamicChecks = dynamicFields.map(([fieldName, type]) => { - const lengthPos = `${fieldName}LengthPos`; - const assertionError = getEncodingError(fieldName); - const validationMethod = getTypeValidationMethodName(type); + const dynamicChecks = dynamicFields + .map(([fieldName, type]) => { + const lengthPos = `${fieldName}LengthPos`; + const assertionError = getEncodingError(fieldName); + const validationMethod = getTypeValidationMethodName(type); - return ` + return ` let ${lengthPos} := ${getPtrGetterName(fieldName)}(innerTxDataOffset) if iszero(eq(${lengthPos}, expectedDynamicLenPtr)) { assertionError("${assertionError}") } expectedDynamicLenPtr := ${validationMethod}(${lengthPos}) - ` - }).join('\n'); + `; + }) + .join("\n"); return ` /// This method checks that the transaction's structure is correct @@ -378,13 +395,13 @@ export function getTransactionUtils(): string { ///\n`; let innerOffsetBytes = 0; - let checksStr = ``; + let checksStr = ""; const dynamicFields: [string, DynamicType][] = []; - for(const [key, value] of Object.entries(TransactionFields)) { + for (const [key, value] of Object.entries(TransactionFields)) { if (Array.isArray(value)) { - // We assume that the - for(let i = 0; i < value.length; i++) { + // We assume that the + for (let i = 0; i < value.length; i++) { const keyName = `${key}${i}`; result += getGetter(keyName, innerOffsetBytes); checksStr += validateFixedSizeField(keyName, value[i]); @@ -402,11 +419,7 @@ export function getTransactionUtils(): string { } } - result += getValidateTxStructure( - checksStr, - innerOffsetBytes, - dynamicFields - ); + result += getValidateTxStructure(checksStr, innerOffsetBytes, dynamicFields); result += getDataLength(innerOffsetBytes, dynamicFields); @@ -414,5 +427,5 @@ export function getTransactionUtils(): string { } export function getRevertSelector(): string { - return ethers.utils.keccak256(ethers.utils.toUtf8Bytes('Error(string)')).substring(0, 10); + return ethers.utils.keccak256(ethers.utils.toUtf8Bytes("Error(string)")).substring(0, 10); } diff --git a/etc/system-contracts/scripts/deploy-preimages.ts b/etc/system-contracts/scripts/deploy-preimages.ts new file mode 100644 index 00000000..20cc8611 --- /dev/null +++ b/etc/system-contracts/scripts/deploy-preimages.ts @@ -0,0 +1,305 @@ +import * as hre from "hardhat"; + +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import { Command } from "commander"; +import type { BigNumber } from "ethers"; +import { ethers } from "ethers"; +import { formatUnits, parseUnits } from "ethers/lib/utils"; +import * as fs from "fs"; +import * as path from "path"; +import { Provider, Wallet } from "zksync-web3"; +import { hashBytecode } from "zksync-web3/build/src/utils"; +import { Language, SYSTEM_CONTRACTS } from "./constants"; +import type { Dependency, DeployedDependency } from "./utils"; +import { filterPublishedFactoryDeps, publishFactoryDeps, readYulBytecode } from "./utils"; + +const testConfigPath = path.join(process.env.ZKSYNC_HOME as string, "etc/test_config/constant"); +const ethTestConfig = JSON.parse(fs.readFileSync(`${testConfigPath}/eth.json`, { encoding: "utf-8" })); + +// Maximum length of the combined length of dependencies +const MAX_COMBINED_LENGTH = 90000; + +const DEFAULT_ACCOUNT_CONTRACT_NAME = "DefaultAccount"; +const BOOTLOADER_CONTRACT_NAME = "Bootloader"; + +class ZkSyncDeployer { + deployer: Deployer; + gasPrice: BigNumber; + nonce: number; + dependenciesToUpgrade: DeployedDependency[]; + defaultAccountToUpgrade?: DeployedDependency; + bootloaderToUpgrade?: DeployedDependency; + constructor(deployer: Deployer, gasPrice: BigNumber, nonce: number) { + this.deployer = deployer; + this.gasPrice = gasPrice; + this.nonce = nonce; + this.dependenciesToUpgrade = []; + } + + async publishFactoryDeps(dependencies: Dependency[]) { + await publishFactoryDeps(dependencies, this.deployer, this.nonce, this.gasPrice); + this.nonce += 1; + } + + // Returns the current default account bytecode on zkSync + async currentDefaultAccountBytecode(): Promise { + const zkSync = await this.deployer.zkWallet.getMainContract(); + return await zkSync.getL2DefaultAccountBytecodeHash(); + } + + // If needed, appends the default account bytecode to the upgrade + async checkShouldUpgradeDefaultAA(defaultAccountBytecode: string) { + const bytecodeHash = ethers.utils.hexlify(hashBytecode(defaultAccountBytecode)); + const currentDefaultAccountBytecode = ethers.utils.hexlify(await this.currentDefaultAccountBytecode()); + + // If the bytecode is not the same as the one deployed on zkSync, we need to add it to the deployment + if (bytecodeHash.toLowerCase() !== currentDefaultAccountBytecode) { + this.defaultAccountToUpgrade = { + name: DEFAULT_ACCOUNT_CONTRACT_NAME, + bytecodeHashes: [bytecodeHash], + }; + } + } + + // Publish default account bytecode + async publishDefaultAA(defaultAccountBytecode: string) { + const [defaultAccountBytecodes] = await filterPublishedFactoryDeps( + DEFAULT_ACCOUNT_CONTRACT_NAME, + [defaultAccountBytecode], + this.deployer + ); + + if (defaultAccountBytecodes.length == 0) { + console.log("Default account bytecode is already published, skipping"); + return; + } + + await this.publishFactoryDeps([ + { + name: DEFAULT_ACCOUNT_CONTRACT_NAME, + bytecodes: defaultAccountBytecodes, + }, + ]); + this.nonce += 1; + } + + // Publishes the bytecode of default AA and appends it to the deployed bytecodes if needed. + async processDefaultAA() { + const defaultAccountBytecode = (await this.deployer.loadArtifact(DEFAULT_ACCOUNT_CONTRACT_NAME)).bytecode; + + await this.publishDefaultAA(defaultAccountBytecode); + await this.checkShouldUpgradeDefaultAA(defaultAccountBytecode); + } + + async currentBootloaderBytecode(): Promise { + const zkSync = await this.deployer.zkWallet.getMainContract(); + return await zkSync.getL2BootloaderBytecodeHash(); + } + + async checkShouldUpgradeBootloader(bootloaderCode: string) { + const bytecodeHash = ethers.utils.hexlify(hashBytecode(bootloaderCode)); + const currentBootloaderBytecode = ethers.utils.hexlify(await this.currentBootloaderBytecode()); + + // If the bytecode is not the same as the one deployed on zkSync, we need to add it to the deployment + if (bytecodeHash.toLowerCase() !== currentBootloaderBytecode) { + this.bootloaderToUpgrade = { + name: BOOTLOADER_CONTRACT_NAME, + bytecodeHashes: [bytecodeHash], + }; + } + } + + async publishBootloader(bootloaderCode: string) { + console.log("\nPublishing bootloader bytecode:"); + + const [deps] = await filterPublishedFactoryDeps(BOOTLOADER_CONTRACT_NAME, [bootloaderCode], this.deployer); + + if (deps.length == 0) { + console.log("Default bootloader bytecode is already published, skipping"); + return; + } + + await this.publishFactoryDeps([ + { + name: BOOTLOADER_CONTRACT_NAME, + bytecodes: deps, + }, + ]); + } + + async processBootloader() { + const bootloaderCode = ethers.utils.hexlify( + fs.readFileSync("./bootloader/build/artifacts/proved_batch.yul/proved_batch.yul.zbin") + ); + + await this.publishBootloader(bootloaderCode); + await this.checkShouldUpgradeBootloader(bootloaderCode); + } + + async shouldUpgradeSystemContract(contractAddress: string, expectedBytecodeHash: string): Promise { + // We could have also used the `getCode` method of the JSON-RPC, but in the context + // of system upgrades looking into account code storage is more robust + const currentBytecodeHash = await this.deployer.zkWallet.provider.getStorageAt( + SYSTEM_CONTRACTS.accountCodeStorage.address, + contractAddress + ); + + return expectedBytecodeHash.toLowerCase() !== currentBytecodeHash.toLowerCase(); + } + + // Returns the contracts to be published. + async prepareContractsForPublishing(): Promise { + const dependenciesToPublish: Dependency[] = []; + for (const contract of Object.values(SYSTEM_CONTRACTS)) { + const contractName = contract.codeName; + let factoryDeps: string[] = []; + if (contract.lang == Language.Solidity) { + const artifact = await this.deployer.loadArtifact(contractName); + factoryDeps = [...(await this.deployer.extractFactoryDeps(artifact)), artifact.bytecode]; + } else { + // Yul files have only one dependency + factoryDeps = [readYulBytecode(contract)]; + } + + const contractBytecodeHash = ethers.utils.hexlify(hashBytecode(factoryDeps[factoryDeps.length - 1])); + if (await this.shouldUpgradeSystemContract(contract.address, contractBytecodeHash)) { + this.dependenciesToUpgrade.push({ + name: contractName, + bytecodeHashes: [contractBytecodeHash], + address: contract.address, + }); + } + + const [bytecodesToPublish, currentLength] = await filterPublishedFactoryDeps( + contractName, + factoryDeps, + this.deployer + ); + if (bytecodesToPublish.length == 0) { + console.log(`All bytecodes for ${contractName} are already published, skipping`); + continue; + } + if (currentLength > MAX_COMBINED_LENGTH) { + throw new Error(`Can not publish dependencies of contract ${contractName}`); + } + + dependenciesToPublish.push({ + name: contractName, + bytecodes: bytecodesToPublish, + address: contract.address, + }); + } + + return dependenciesToPublish; + } + + async publishDependencies(dependenciesToPublish: Dependency[]) { + let currentLength = 0; + let currentDependencies: Dependency[] = []; + // We iterate over dependencies and try to batch the publishing of those in order to save up on gas as well as time. + for (const dependency of dependenciesToPublish) { + const dependencyLength = dependency.bytecodes.reduce((prev, dep) => prev + ethers.utils.arrayify(dep).length, 0); + if (currentLength + dependencyLength > MAX_COMBINED_LENGTH) { + await this.publishFactoryDeps(currentDependencies); + currentLength = dependencyLength; + currentDependencies = [dependency]; + } else { + currentLength += dependencyLength; + currentDependencies.push(dependency); + } + } + if (currentDependencies.length > 0) { + await this.publishFactoryDeps(currentDependencies); + } + } + + returnResult() { + return { + systemContracts: this.dependenciesToUpgrade, + defaultAA: this.defaultAccountToUpgrade, + bootloader: this.bootloaderToUpgrade, + }; + } +} + +export function l1RpcUrl() { + return process.env.ETH_CLIENT_WEB3_URL as string; +} + +export function l2RpcUrl() { + return process.env.API_WEB3_JSON_RPC_HTTP_URL as string; +} + +async function main() { + const program = new Command(); + + program.version("0.1.0").name("publish preimages").description("publish preimages for the L2 contracts"); + + program + .option("--private-key ") + .option("--gas-price ") + .option("--nonce ") + .option("--l1Rpc ") + .option("--l2Rpc ") + .option("--bootloader") + .option("--default-aa") + .option("--system-contracts") + .option("--file ") + .action(async (cmd) => { + const l1Rpc = cmd.l1Rpc ? cmd.l1Rpc : l1RpcUrl(); + const l2Rpc = cmd.l2Rpc ? cmd.l2Rpc : l2RpcUrl(); + const providerL1 = new ethers.providers.JsonRpcProvider(l1Rpc); + const providerL2 = new Provider(l2Rpc); + const wallet = cmd.privateKey + ? new Wallet(cmd.privateKey) + : Wallet.fromMnemonic(process.env.MNEMONIC ? process.env.MNEMONIC : ethTestConfig.mnemonic, "m/44'/60'/0'/0/1"); + wallet.connect(providerL2); + wallet.connectToL1(providerL1); + + // TODO(EVM-392): refactor to avoid `any` here. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const deployer = new Deployer(hre, wallet as any); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + deployer.zkWallet = deployer.zkWallet.connect(providerL2 as any).connectToL1(providerL1); + deployer.ethWallet = deployer.ethWallet.connect(providerL1); + const ethWallet = deployer.ethWallet; + + console.log(`Using deployer wallet: ${ethWallet.address}`); + + const gasPrice = cmd.gasPrice ? parseUnits(cmd.gasPrice, "gwei") : await providerL1.getGasPrice(); + console.log(`Using gas price: ${formatUnits(gasPrice, "gwei")} gwei`); + + const nonce = cmd.nonce ? parseInt(cmd.nonce) : await ethWallet.getTransactionCount(); + console.log(`Using nonce: ${nonce}`); + + const zkSyncDeployer = new ZkSyncDeployer(deployer, gasPrice, nonce); + if (cmd.bootloader) { + await zkSyncDeployer.processBootloader(); + } + + if (cmd.defaultAa) { + await zkSyncDeployer.processDefaultAA(); + } + + if (cmd.systemContracts) { + const dependenciesToPublish = await zkSyncDeployer.prepareContractsForPublishing(); + await zkSyncDeployer.publishDependencies(dependenciesToPublish); + } + + const result = zkSyncDeployer.returnResult(); + console.log(JSON.stringify(result, null, 2)); + if (cmd.file) { + fs.writeFileSync(cmd.file, JSON.stringify(result, null, 2)); + } + console.log("\nPublishing factory dependencies complete!"); + }); + + await program.parseAsync(process.argv); +} + +main() + .then(() => process.exit(0)) + .catch((err) => { + console.error("Error:", err); + process.exit(1); + }); diff --git a/etc/system-contracts/scripts/process.ts b/etc/system-contracts/scripts/process.ts index cccb72a6..3c230f61 100644 --- a/etc/system-contracts/scripts/process.ts +++ b/etc/system-contracts/scripts/process.ts @@ -1,14 +1,23 @@ -const preprocess = require('preprocess'); +import * as hre from "hardhat"; -import { existsSync, mkdirSync, write, writeFileSync } from 'fs'; -import { SYSTEM_CONTRACTS, getRevertSelector, getTransactionUtils } from './constants'; -import * as hre from 'hardhat'; -import { ethers } from 'ethers'; -import { renderFile } from 'template-file'; -import { utils } from 'zksync-web3'; -import { ForceDeployment } from './utils'; -const OUTPUT_DIR = 'bootloader/build'; +import { ethers } from "ethers"; +import { existsSync, mkdirSync, writeFileSync } from "fs"; +import { join } from "path"; +import { renderFile } from "template-file"; +import { utils } from "zksync-web3"; +import { SYSTEM_CONTRACTS, getRevertSelector, getTransactionUtils } from "./constants"; +import type { ForceDeployment } from "./utils"; +/* eslint-disable @typescript-eslint/no-var-requires */ +const preprocess = require("preprocess"); +const SYSTEM_PARAMS = require("../SystemConfig.json"); +/* eslint-enable@typescript-eslint/no-var-requires */ + +const OUTPUT_DIR = "bootloader/build"; + +function path(...args: string[]): string { + return join(__dirname, ...args); +} function getSelector(contractName: string, method: string): string { const artifact = hre.artifacts.readArtifactSync(contractName); @@ -20,7 +29,7 @@ function getSelector(contractName: string, method: string): string { // Methods from ethers do zero pad from left, but we need to pad from the right function padZeroRight(hexData: string, length: number): string { while (hexData.length < length) { - hexData += '0'; + hexData += "0"; } return hexData; @@ -28,15 +37,13 @@ function padZeroRight(hexData: string, length: number): string { const PADDED_SELECTOR_LENGTH = 32 * 2 + 2; function getPaddedSelector(contractName: string, method: string): string { - let result = getSelector(contractName, method); + const result = getSelector(contractName, method); - return padZeroRight(result, PADDED_SELECTOR_LENGTH) + return padZeroRight(result, PADDED_SELECTOR_LENGTH); } -const SYSTEM_PARAMS = require('../SystemConfig.json'); - function getSystemContextExpectedHash() { - const artifact = hre.artifacts.readArtifactSync('SystemContext'); + const artifact = hre.artifacts.readArtifactSync("SystemContext"); return ethers.utils.hexlify(utils.hashBytecode(artifact.bytecode)); } @@ -45,33 +52,33 @@ function upgradeSystemContextCalldata() { // it into writing of the calldata into the bootloader memory. const newHash = getSystemContextExpectedHash(); - const artifact = new ethers.utils.Interface(hre.artifacts.readArtifactSync('ContractDeployer').abi); + const artifact = new ethers.utils.Interface(hre.artifacts.readArtifactSync("ContractDeployer").abi); const forceDeplyment: ForceDeployment = { bytecodeHash: newHash, - newAddress: SYSTEM_CONTRACTS.systemContext.address, + newAddress: SYSTEM_CONTRACTS.systemContext.address, callConstructor: false, value: 0, - input: '0x' + input: "0x", }; - let calldata = artifact.encodeFunctionData('forceDeployOnAddresses', [[forceDeplyment]]); + let calldata = artifact.encodeFunctionData("forceDeployOnAddresses", [[forceDeplyment]]); const originalLength = (calldata.length - 2) / 2; // Padding calldata from the right. We really need to do it, since Yul would "implicitly" pad it from the left and it // it is not what we want. - while((calldata.length - 2) % 64 != 0) { - calldata += '0'; + while ((calldata.length - 2) % 64 != 0) { + calldata += "0"; } // We will apply tabulation to make the compiled bootloader code more readable - const TABULATION = '\t\t\t\t\t'; + const TABULATION = "\t\t\t\t\t"; // In the first slot we need to store the calldata's length let data = `mstore(0x00, ${originalLength})\n`; - + const slices = (calldata.length - 2) / 64; - for(let slice = 0; slice < slices; slice++) { + for (let slice = 0; slice < slices; slice++) { const offset = slice * 32; const sliceHex = calldata.slice(2 + offset * 2, 2 + offset * 2 + 64); @@ -83,97 +90,140 @@ function upgradeSystemContextCalldata() { // Maybe in the future some of these params will be passed // in a JSON file. For now, a simple object is ok here. -let params = { - MARK_BATCH_AS_REPUBLISHED_SELECTOR: getSelector('KnownCodesStorage', 'markFactoryDeps'), - VALIDATE_TX_SELECTOR: getSelector('IAccount', 'validateTransaction'), - EXECUTE_TX_SELECTOR: getSelector('DefaultAccount', 'executeTransaction'), - RIGHT_PADDED_GET_ACCOUNT_VERSION_SELECTOR: getPaddedSelector('ContractDeployer','extendedAccountVersion'), - RIGHT_PADDED_GET_RAW_CODE_HASH_SELECTOR: getPaddedSelector('AccountCodeStorage', 'getRawCodeHash'), - PAY_FOR_TX_SELECTOR: getSelector('DefaultAccount', 'payForTransaction'), - PRE_PAYMASTER_SELECTOR: getSelector('DefaultAccount', 'prepareForPaymaster'), - VALIDATE_AND_PAY_PAYMASTER: getSelector('IPaymaster', 'validateAndPayForPaymasterTransaction'), +const params = { + MARK_BATCH_AS_REPUBLISHED_SELECTOR: getSelector("KnownCodesStorage", "markFactoryDeps"), + VALIDATE_TX_SELECTOR: getSelector("IAccount", "validateTransaction"), + EXECUTE_TX_SELECTOR: getSelector("DefaultAccount", "executeTransaction"), + RIGHT_PADDED_GET_ACCOUNT_VERSION_SELECTOR: getPaddedSelector("ContractDeployer", "extendedAccountVersion"), + RIGHT_PADDED_GET_RAW_CODE_HASH_SELECTOR: getPaddedSelector("AccountCodeStorage", "getRawCodeHash"), + PAY_FOR_TX_SELECTOR: getSelector("DefaultAccount", "payForTransaction"), + PRE_PAYMASTER_SELECTOR: getSelector("DefaultAccount", "prepareForPaymaster"), + VALIDATE_AND_PAY_PAYMASTER: getSelector("IPaymaster", "validateAndPayForPaymasterTransaction"), // It doesn't used directly now but is important to keep the way to regenerate it when needed TX_UTILITIES: getTransactionUtils(), - RIGHT_PADDED_POST_TRANSACTION_SELECTOR: getPaddedSelector('IPaymaster', 'postTransaction'), - RIGHT_PADDED_SET_TX_ORIGIN: getPaddedSelector('SystemContext', 'setTxOrigin'), - RIGHT_PADDED_SET_GAS_PRICE: getPaddedSelector('SystemContext', 'setGasPrice'), - RIGHT_PADDED_INCREMENT_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'incrementTxNumberInBatch'), - RIGHT_PADDED_RESET_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'resetTxNumberInBatch'), - RIGHT_PADDED_SEND_L2_TO_L1_LOG_SELECTOR: getPaddedSelector('L1Messenger', 'sendL2ToL1Log'), - PUBLISH_PUBDATA_SELECTOR: getSelector('L1Messenger', 'publishPubdataAndClearState'), - RIGHT_PADDED_SET_NEW_BATCH_SELECTOR: getPaddedSelector('SystemContext', 'setNewBatch'), - RIGHT_PADDED_OVERRIDE_BATCH_SELECTOR: getPaddedSelector('SystemContext', 'unsafeOverrideBatch'), + RIGHT_PADDED_POST_TRANSACTION_SELECTOR: getPaddedSelector("IPaymaster", "postTransaction"), + RIGHT_PADDED_SET_TX_ORIGIN: getPaddedSelector("SystemContext", "setTxOrigin"), + RIGHT_PADDED_SET_GAS_PRICE: getPaddedSelector("SystemContext", "setGasPrice"), + RIGHT_PADDED_INCREMENT_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector("SystemContext", "incrementTxNumberInBatch"), + RIGHT_PADDED_RESET_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector("SystemContext", "resetTxNumberInBatch"), + RIGHT_PADDED_SEND_L2_TO_L1_LOG_SELECTOR: getPaddedSelector("L1Messenger", "sendL2ToL1Log"), + PUBLISH_PUBDATA_SELECTOR: getSelector("L1Messenger", "publishPubdataAndClearState"), + RIGHT_PADDED_SET_NEW_BATCH_SELECTOR: getPaddedSelector("SystemContext", "setNewBatch"), + RIGHT_PADDED_OVERRIDE_BATCH_SELECTOR: getPaddedSelector("SystemContext", "unsafeOverrideBatch"), // Error REVERT_ERROR_SELECTOR: padZeroRight(getRevertSelector(), PADDED_SELECTOR_LENGTH), - RIGHT_PADDED_VALIDATE_NONCE_USAGE_SELECTOR: getPaddedSelector('INonceHolder', 'validateNonceUsage'), - RIGHT_PADDED_MINT_ETHER_SELECTOR: getPaddedSelector('L2EthToken', 'mint'), - GET_TX_HASHES_SELECTOR: getSelector('BootloaderUtilities', 'getTransactionHashes'), - CREATE_SELECTOR: getSelector('ContractDeployer','create'), - CREATE2_SELECTOR: getSelector('ContractDeployer','create2'), - CREATE_ACCOUNT_SELECTOR: getSelector('ContractDeployer','createAccount'), - CREATE2_ACCOUNT_SELECTOR: getSelector('ContractDeployer','create2Account'), - PADDED_TRANSFER_FROM_TO_SELECTOR: getPaddedSelector('L2EthToken', 'transferFromTo'), - SUCCESSFUL_ACCOUNT_VALIDATION_MAGIC_VALUE: getPaddedSelector('IAccount', 'validateTransaction'), - SUCCESSFUL_PAYMASTER_VALIDATION_MAGIC_VALUE: getPaddedSelector('IPaymaster', 'validateAndPayForPaymasterTransaction'), - PUBLISH_COMPRESSED_BYTECODE_SELECTOR: getSelector('Compressor', 'publishCompressedBytecode'), - GET_MARKER_PADDED_SELECTOR: getPaddedSelector('KnownCodesStorage', 'getMarker'), - RIGHT_PADDED_SET_L2_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'setL2Block'), - RIGHT_PADDED_APPEND_TRANSACTION_TO_L2_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'appendTransactionToCurrentL2Block'), - RIGHT_PADDED_PUBLISH_TIMESTAMP_DATA_TO_L1_SELECTOR: getPaddedSelector('SystemContext', 'publishTimestampDataToL1'), + RIGHT_PADDED_VALIDATE_NONCE_USAGE_SELECTOR: getPaddedSelector("INonceHolder", "validateNonceUsage"), + RIGHT_PADDED_MINT_ETHER_SELECTOR: getPaddedSelector("L2EthToken", "mint"), + GET_TX_HASHES_SELECTOR: getSelector("BootloaderUtilities", "getTransactionHashes"), + CREATE_SELECTOR: getSelector("ContractDeployer", "create"), + CREATE2_SELECTOR: getSelector("ContractDeployer", "create2"), + CREATE_ACCOUNT_SELECTOR: getSelector("ContractDeployer", "createAccount"), + CREATE2_ACCOUNT_SELECTOR: getSelector("ContractDeployer", "create2Account"), + PADDED_TRANSFER_FROM_TO_SELECTOR: getPaddedSelector("L2EthToken", "transferFromTo"), + SUCCESSFUL_ACCOUNT_VALIDATION_MAGIC_VALUE: getPaddedSelector("IAccount", "validateTransaction"), + SUCCESSFUL_PAYMASTER_VALIDATION_MAGIC_VALUE: getPaddedSelector("IPaymaster", "validateAndPayForPaymasterTransaction"), + PUBLISH_COMPRESSED_BYTECODE_SELECTOR: getSelector("Compressor", "publishCompressedBytecode"), + GET_MARKER_PADDED_SELECTOR: getPaddedSelector("KnownCodesStorage", "getMarker"), + RIGHT_PADDED_SET_L2_BLOCK_SELECTOR: getPaddedSelector("SystemContext", "setL2Block"), + RIGHT_PADDED_APPEND_TRANSACTION_TO_L2_BLOCK_SELECTOR: getPaddedSelector( + "SystemContext", + "appendTransactionToCurrentL2Block" + ), + RIGHT_PADDED_PUBLISH_TIMESTAMP_DATA_TO_L1_SELECTOR: getPaddedSelector("SystemContext", "publishTimestampDataToL1"), COMPRESSED_BYTECODES_SLOTS: 32768, ENSURE_RETURNED_MAGIC: 1, FORBID_ZERO_GAS_PER_PUBDATA: 1, SYSTEM_CONTEXT_EXPECTED_CODE_HASH: getSystemContextExpectedHash(), UPGRADE_SYSTEM_CONTEXT_CALLDATA: upgradeSystemContextCalldata(), - // One of "worst case" scenarios for the number of state diffs in a batch is when 120kb of pubdata is spent + // One of "worst case" scenarios for the number of state diffs in a batch is when 120kb of pubdata is spent // on repeated writes, that are all zeroed out. In this case, the number of diffs is 120k / 5 = 24k. This means that they will have - // accoomdate 6528000 bytes of calldata for the uncompressed state diffs. Adding 120k on top leaves us with + // accoomdate 6528000 bytes of calldata for the uncompressed state diffs. Adding 120k on top leaves us with // roughly 6650000 bytes needed for calldata. 207813 slots are needed to accomodate this amount of data. // We round up to 208000 slots just in case. // - // In theory though much more calldata could be used (if for instance 1 byte is used for enum index). It is the responsibility of the + // In theory though much more calldata could be used (if for instance 1 byte is used for enum index). It is the responsibility of the // operator to ensure that it can form the correct calldata for the L1Messenger. OPERATOR_PROVIDED_L1_MESSENGER_PUBDATA_SLOTS: 208000, - ...SYSTEM_PARAMS + ...SYSTEM_PARAMS, }; +function extractTestFunctionNames(sourceCode: string): string[] { + // Remove single-line comments + sourceCode = sourceCode.replace(/\/\/[^\n]*/g, ""); + + // Remove multi-line comments + sourceCode = sourceCode.replace(/\/\*[\s\S]*?\*\//g, ""); + + const regexPatterns = [/function\s+(TEST\w+)/g]; + + const results: string[] = []; + for (const pattern of regexPatterns) { + let match; + while ((match = pattern.exec(sourceCode)) !== null) { + results.push(match[1]); + } + } + + return [...new Set(results)]; // Remove duplicates +} + +function createTestFramework(tests: string[]): string { + let testFramework = ` + let test_id:= mload(0) + + switch test_id + case 0 { + testing_totalTests(${tests.length}) + } + `; + + tests.forEach((value, index) => { + testFramework += ` + case ${index + 1} { + testing_start("${value}") + ${value}() + } + `; + }); + + testFramework += ` + default { + } + return (0, 0) + `; + + return testFramework; +} + async function main() { - const bootloader = await renderFile('bootloader/bootloader.yul', params); - // The overhead is unknown for gas tests and so it should be zero to calculate it - const gasTestBootloaderTemplate = await renderFile('bootloader/bootloader.yul', { + const bootloader = await renderFile("bootloader/bootloader.yul", params); + // The overhead is unknown for gas tests and so it should be zero to calculate it + const gasTestBootloaderTemplate = await renderFile("bootloader/bootloader.yul", { ...params, L2_TX_INTRINSIC_GAS: 0, L2_TX_INTRINSIC_PUBDATA: 0, L1_TX_INTRINSIC_L2_GAS: 0, L1_TX_INTRINSIC_PUBDATA: 0, - FORBID_ZERO_GAS_PER_PUBDATA: 0 - }) + FORBID_ZERO_GAS_PER_PUBDATA: 0, + }); - const feeEstimationBootloaderTemplate = await renderFile('bootloader/bootloader.yul', { + const feeEstimationBootloaderTemplate = await renderFile("bootloader/bootloader.yul", { ...params, - ENSURE_RETURNED_MAGIC: 0 + ENSURE_RETURNED_MAGIC: 0, }); - console.log('Preprocessing production bootloader'); - const provedBatchBootloader = preprocess.preprocess( - bootloader, - { BOOTLOADER_TYPE: 'proved_batch' } - ); - console.log('Preprocessing playground block bootloader'); - const playgroundBatchBootloader = preprocess.preprocess( - bootloader, - { BOOTLOADER_TYPE: 'playground_batch' } - ); - console.log('Preprocessing gas test bootloader'); - const gasTestBootloader = preprocess.preprocess( - gasTestBootloaderTemplate, - { BOOTLOADER_TYPE: 'proved_batch' } - ); - console.log('Preprocessing fee estimation bootloader'); - const feeEstimationBootloader = preprocess.preprocess( - feeEstimationBootloaderTemplate, - { BOOTLOADER_TYPE: 'playground_batch' } - ); + console.log("Preprocessing production bootloader"); + const provedBatchBootloader = preprocess.preprocess(bootloader, { BOOTLOADER_TYPE: "proved_batch" }); + console.log("Preprocessing playground block bootloader"); + const playgroundBatchBootloader = preprocess.preprocess(bootloader, { BOOTLOADER_TYPE: "playground_batch" }); + console.log("Preprocessing gas test bootloader"); + const gasTestBootloader = preprocess.preprocess(gasTestBootloaderTemplate, { BOOTLOADER_TYPE: "proved_batch" }); + console.log("Preprocessing fee estimation bootloader"); + const feeEstimationBootloader = preprocess.preprocess(feeEstimationBootloaderTemplate, { + BOOTLOADER_TYPE: "playground_batch", + }); + + // For impersonating block start console.log('Preprocessing production impersonating bootloader'); const provedBatchImpersonatingBootloader = preprocess.preprocess( bootloader, @@ -184,19 +234,41 @@ async function main() { bootloader, { BOOTLOADER_TYPE: 'playground_batch', ACCOUNT_IMPERSONATING: true } ); + // For impersonating block end - if(!existsSync(OUTPUT_DIR)) { + console.log("Preprocessing bootloader tests"); + const bootloaderTests = await renderFile("bootloader/tests/bootloader/bootloader_test.yul", {}); + + const testMethods = extractTestFunctionNames(bootloaderTests); + + console.log("Found tests: " + testMethods); + + const testFramework = createTestFramework(testMethods); + + const bootloaderTestUtils = await renderFile("bootloader/tests/utils/test_utils.yul", {}); + + const bootloaderWithTests = await renderFile("bootloader/bootloader.yul", { + ...params, + CODE_START_PLACEHOLDER: "\n" + bootloaderTestUtils + "\n" + bootloaderTests + "\n" + testFramework, + }); + const provedBootloaderWithTests = preprocess.preprocess(bootloaderWithTests, { BOOTLOADER_TYPE: "proved_batch" }); + + if (!existsSync(OUTPUT_DIR)) { mkdirSync(OUTPUT_DIR); } - writeFileSync(`${OUTPUT_DIR}/proved_batch.yul`, provedBatchBootloader); - writeFileSync(`${OUTPUT_DIR}/playground_batch.yul`, playgroundBatchBootloader); - writeFileSync(`${OUTPUT_DIR}/gas_test.yul`, gasTestBootloader); - writeFileSync(`${OUTPUT_DIR}/fee_estimate.yul`, feeEstimationBootloader); - writeFileSync(`${OUTPUT_DIR}/proved_batch_impersonating.yul`, provedBatchImpersonatingBootloader); - writeFileSync(`${OUTPUT_DIR}/fee_estimate_impersonating.yul`, feeEstimationImpersonatingBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/bootloader_test.yul`), provedBootloaderWithTests); + writeFileSync(path(`../${OUTPUT_DIR}/proved_batch.yul`), provedBatchBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/playground_batch.yul`), playgroundBatchBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/gas_test.yul`), gasTestBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/fee_estimate.yul`), feeEstimationBootloader); + + // For impersonating block start + writeFileSync(path(`../${OUTPUT_DIR}/proved_batch_impersonating.yul`), provedBatchImpersonatingBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/fee_estimate_impersonating.yul`), feeEstimationImpersonatingBootloader); + // For impersonating block end - console.log('Preprocessing done!'); + console.log("Preprocessing done!"); } main(); diff --git a/etc/system-contracts/scripts/quick-setup.sh b/etc/system-contracts/scripts/quick-setup.sh new file mode 100755 index 00000000..341d77d2 --- /dev/null +++ b/etc/system-contracts/scripts/quick-setup.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# install rust +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + +rustup toolchain install nightly + +# install era-test-node +cargo +nightly install --git https://github.com/matter-labs/era-test-node.git --locked --branch boojum-integration + +yarn +yarn build +era_test_node run > /dev/null 2>&1 & export TEST_NODE_PID=$! +yarn test +kill $TEST_NODE_PID diff --git a/etc/system-contracts/scripts/utils.ts b/etc/system-contracts/scripts/utils.ts index b48a3d01..8ef1dfff 100644 --- a/etc/system-contracts/scripts/utils.ts +++ b/etc/system-contracts/scripts/utils.ts @@ -1,9 +1,12 @@ -import {Language, SYSTEM_CONTRACTS, YulContractDescrption} from "./constants"; -import {BigNumber, BigNumberish, BytesLike, ethers} from "ethers"; +import * as hre from "hardhat"; + +import type { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import type { BigNumberish, BytesLike } from "ethers"; +import { BigNumber, ethers } from "ethers"; import * as fs from "fs"; -import {hashBytecode} from "zksync-web3/build/src/utils"; -import * as hre from 'hardhat'; -import {Deployer} from "@matterlabs/hardhat-zksync-deploy"; +import { hashBytecode } from "zksync-web3/build/src/utils"; +import type { YulContractDescrption } from "./constants"; +import { Language, SYSTEM_CONTRACTS } from "./constants"; export interface Dependency { name: string; @@ -39,24 +42,26 @@ export interface ForceDeployment { } export async function outputSystemContracts(): Promise { - const upgradeParamsPromises: Promise[] = Object.values(SYSTEM_CONTRACTS).map(async (systemContractInfo) => { - let bytecode: string; - - if (systemContractInfo.lang === Language.Yul) { - bytecode = readYulBytecode(systemContractInfo); - } else { - bytecode = (await hre.artifacts.readArtifact(systemContractInfo.codeName)).bytecode; - } - const bytecodeHash = hashBytecode(bytecode); - - return { - bytecodeHash: ethers.utils.hexlify(bytecodeHash), - newAddress: systemContractInfo.address, - value: "0", - input: '0x', - callConstructor: false + const upgradeParamsPromises: Promise[] = Object.values(SYSTEM_CONTRACTS).map( + async (systemContractInfo) => { + let bytecode: string; + + if (systemContractInfo.lang === Language.Yul) { + bytecode = readYulBytecode(systemContractInfo); + } else { + bytecode = (await hre.artifacts.readArtifact(systemContractInfo.codeName)).bytecode; + } + const bytecodeHash = hashBytecode(bytecode); + + return { + bytecodeHash: ethers.utils.hexlify(bytecodeHash), + newAddress: systemContractInfo.address, + value: "0", + input: "0x", + callConstructor: false, + }; } - }); + ); return await Promise.all(upgradeParamsPromises); } @@ -65,14 +70,13 @@ export async function outputSystemContracts(): Promise { // and outputs the JSON that can be used for performing the necessary upgrade const DEFAULT_L2_TX_GAS_LIMIT = 2097152; - -// For the given dependencies, returns an array of tuples (bytecodeHash, marker), where +// For the given dependencies, returns an array of tuples (bytecodeHash, marker), where // for each dependency the bytecodeHash is its versioned hash and marker is whether // the hash has been published before. export async function getMarkers(dependencies: BytesLike[], deployer: Deployer): Promise<[string, boolean][]> { const contract = new ethers.Contract( SYSTEM_CONTRACTS.knownCodesStorage.address, - (await hre.artifacts.readArtifact('KnownCodesStorage')).abi, + (await hre.artifacts.readArtifact("KnownCodesStorage")).abi, deployer.zkWallet ); @@ -91,8 +95,8 @@ export async function getMarkers(dependencies: BytesLike[], deployer: Deployer): export async function checkMarkers(dependencies: BytesLike[], deployer: Deployer) { const markers = await getMarkers(dependencies, deployer); - for(const [bytecodeHash, marker] of markers) { - if(!marker) { + for (const [bytecodeHash, marker] of markers) { + if (!marker) { throw new Error(`Failed to mark ${bytecodeHash}`); } } @@ -110,34 +114,40 @@ export async function publishFactoryDeps( dependencies: Dependency[], deployer: Deployer, nonce: number, - gasPrice: BigNumber, + gasPrice: BigNumber ) { - if(dependencies.length == 0) { + if (dependencies.length == 0) { return []; } const bytecodes = getBytecodes(dependencies); const combinedLength = totalBytesLength(bytecodes); - console.log(`\nPublishing dependencies for contracts ${dependencies.map((dep) => {return dep.name}).join(', ')}`); + console.log( + `\nPublishing dependencies for contracts ${dependencies + .map((dep) => { + return dep.name; + }) + .join(", ")}` + ); console.log(`Combined length ${combinedLength}`); const txHandle = await deployer.zkWallet.requestExecute({ contractAddress: ethers.constants.AddressZero, - calldata: '0x', + calldata: "0x", l2GasLimit: DEFAULT_L2_TX_GAS_LIMIT, factoryDeps: bytecodes, overrides: { nonce, gasPrice, - gasLimit: 3000000 - } - }) + gasLimit: 3000000, + }, + }); console.log(`Transaction hash: ${txHandle.hash}`); // Waiting for the transaction to be processed by the server await txHandle.wait(); - console.log('Transaction complete! Checking markers on L2...'); + console.log("Transaction complete! Checking markers on L2..."); // Double checking that indeed the dependencies have been marked as known await checkMarkers(bytecodes, deployer); @@ -147,21 +157,21 @@ export async function publishFactoryDeps( export async function filterPublishedFactoryDeps( contractName: string, factoryDeps: string[], - deployer: Deployer, + deployer: Deployer ): Promise<[string[], number]> { console.log(`\nFactory dependencies for contract ${contractName}:`); let currentLength = 0; - let bytecodesToDeploy: string[] = []; + const bytecodesToDeploy: string[] = []; const hashesAndMarkers = await getMarkers(factoryDeps, deployer); - for(let i = 0; i < factoryDeps.length; i++) { + for (let i = 0; i < factoryDeps.length; i++) { const depLength = ethers.utils.arrayify(factoryDeps[i]).length; const [hash, marker] = hashesAndMarkers[i]; console.log(`${hash} (length: ${depLength} bytes) (deployed: ${marker})`); - if(!marker) { + if (!marker) { currentLength += depLength; bytecodesToDeploy.push(factoryDeps[i]); } diff --git a/etc/system-contracts/yarn.lock b/etc/system-contracts/yarn.lock index 9adafa56..166747de 100644 --- a/etc/system-contracts/yarn.lock +++ b/etc/system-contracts/yarn.lock @@ -2,6 +2,33 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@babel/code-frame@^7.0.0": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" @@ -20,6 +47,42 @@ "@blakek/curry" "^2.0.2" pathington "^1.1.7" +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -27,6 +90,38 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" + integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -218,10 +313,10 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.1": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c" - integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -369,15 +464,39 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@fastify/busboy@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" + integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + dependencies: + "@humanwhocodes/object-schema" "^2.0.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== + "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -387,6 +506,11 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@matterlabs/eslint-config-typescript@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@matterlabs/eslint-config-typescript/-/eslint-config-typescript-1.1.2.tgz#a9be4e56aedf298800f247c5049fc412f8b301a7" + integrity sha512-AhiWJQr+MSE3RVfgp5XwGoMK7kNSKh6a18+T7hkNJtyycP0306I6IGmuFA5ZVbcakGb+K32fQWzepSkrNCTAGg== + "@matterlabs/hardhat-zksync-chai-matchers@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-chai-matchers/-/hardhat-zksync-chai-matchers-0.1.4.tgz#105cb0ec1367c8fcd3ce7e3773f747c71fff675b" @@ -413,6 +537,11 @@ proper-lockfile "^4.1.2" semver "^7.5.1" +"@matterlabs/prettier-config@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@matterlabs/prettier-config/-/prettier-config-1.0.3.tgz#3e2eb559c0112bbe9671895f935700dad2a15d38" + integrity sha512-JW7nHREPqEtjBWz3EfxLarkmJBD8vi7Kx/1AQ6eBZnz12eHc1VkOyrc6mpR5ogTf0dOUNXFAfZut+cDe2dn4kQ== + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -424,20 +553,15 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/hashes@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/hashes@~1.1.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" - integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== -"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -452,7 +576,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -460,29 +584,31 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" - integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" +"@nomicfoundation/ethereumjs-block@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" + integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" + ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" - integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-ethash" "^2.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" +"@nomicfoundation/ethereumjs-blockchain@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" + integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-ethash" "3.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" debug "^4.3.3" ethereum-cryptography "0.1.3" @@ -490,105 +616,105 @@ lru-cache "^5.1.1" memory-level "^1.0.0" -"@nomicfoundation/ethereumjs-common@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" - integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== +"@nomicfoundation/ethereumjs-common@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" + integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== dependencies: - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-util" "9.0.1" crc-32 "^1.2.0" -"@nomicfoundation/ethereumjs-ethash@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" - integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== +"@nomicfoundation/ethereumjs-ethash@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" + integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" bigint-crypto-utils "^3.0.23" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" - integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== +"@nomicfoundation/ethereumjs-evm@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" + integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" -"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" - integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== +"@nomicfoundation/ethereumjs-rlp@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" + integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== -"@nomicfoundation/ethereumjs-statemanager@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" - integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== +"@nomicfoundation/ethereumjs-statemanager@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" + integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" + ethers "^5.7.1" + js-sdsl "^4.1.4" -"@nomicfoundation/ethereumjs-trie@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" - integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== +"@nomicfoundation/ethereumjs-trie@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" + integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" - integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" +"@nomicfoundation/ethereumjs-tx@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" + integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" - integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== +"@nomicfoundation/ethereumjs-util@9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" + integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" - integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" +"@nomicfoundation/ethereumjs-vm@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" + integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" @@ -603,71 +729,71 @@ deep-eql "^4.0.1" ordinal "^1.0.3" -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" - integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== -"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" - integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" - integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" - integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" - integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" - integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" - integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" - integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" - integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" - integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== -"@nomicfoundation/solidity-analyzer@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz#d1029f872e66cb1082503b02cc8b0be12f8dd95e" - integrity sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg== +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" "@nomiclabs/hardhat-docker@^2.0.0": version "2.0.2" @@ -679,9 +805,9 @@ node-fetch "^2.6.0" "@nomiclabs/hardhat-ethers@^2.0.6": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" - integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== "@nomiclabs/hardhat-solpp@^2.0.1": version "2.0.1" @@ -691,26 +817,38 @@ fs-extra "^7.0.1" solpp "^0.11.5" +"@pkgr/utils@^2.3.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" + integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== + dependencies: + cross-spawn "^7.0.3" + fast-glob "^3.3.0" + is-glob "^4.0.3" + open "^9.1.0" + picocolors "^1.0.0" + tslib "^2.6.0" + "@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== -"@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== dependencies: - "@noble/hashes" "~1.1.1" - "@noble/secp256k1" "~1.6.0" + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" -"@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== dependencies: - "@noble/hashes" "~1.1.1" + "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" "@sentry/core@5.30.0": @@ -781,10 +919,10 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@solidity-parser/parser@^0.14.5": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" - integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== +"@solidity-parser/parser@^0.16.0": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" + integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== dependencies: antlr4ts "^0.5.0-alpha.4" @@ -814,9 +952,9 @@ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@typechain/ethers-v5@^10.0.0": version "10.2.1" @@ -833,11 +971,6 @@ dependencies: fs-extra "^9.1.0" -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== - "@types/bn.js@^4.11.3": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" @@ -869,6 +1002,21 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07" integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== +"@types/json-schema@^7.0.12": + version "7.0.14" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" + integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash@^4.14.199": + version "4.14.199" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.199.tgz#c3edb5650149d847a277a8961a7ad360c474e9bf" + integrity sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg== + "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" @@ -887,9 +1035,9 @@ integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node@*": - version "18.8.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.2.tgz#17d42c6322d917764dd3d2d3a10d7884925de067" - integrity sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA== + version "20.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" + integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== "@types/node@^17.0.34": version "17.0.45" @@ -904,9 +1052,17 @@ "@types/node" "*" "@types/prettier@^2.1.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" - integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" "@types/resolve@^0.0.8": version "0.0.8" @@ -922,10 +1078,100 @@ dependencies: "@types/node" "*" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@types/semver@^7.5.0": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" + integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== + +"@typescript-eslint/eslint-plugin@^6.7.4": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz#fdb6f3821c0167e3356e9d89c80e8230b2e401f4" + integrity sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/type-utils" "6.9.0" + "@typescript-eslint/utils" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.7.4": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.9.0.tgz#2b402cadeadd3f211c25820e5433413347b27391" + integrity sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw== + dependencies: + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/typescript-estree" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz#2626e9a7fe0e004c3e25f3b986c75f584431134e" + integrity sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw== + dependencies: + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + +"@typescript-eslint/type-utils@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz#23923c8c9677c2ad41457cf8e10a5f2946be1b04" + integrity sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ== + dependencies: + "@typescript-eslint/typescript-estree" "6.9.0" + "@typescript-eslint/utils" "6.9.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.9.0.tgz#86a0cbe7ac46c0761429f928467ff3d92f841098" + integrity sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw== + +"@typescript-eslint/typescript-estree@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz#d0601b245be873d8fe49f3737f93f8662c8693d4" + integrity sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ== + dependencies: + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.9.0.tgz#5bdac8604fca4823f090e4268e681c84d3597c9f" + integrity sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/typescript-estree" "6.9.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz#cc69421c10c4ac997ed34f453027245988164e80" + integrity sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg== + dependencies: + "@typescript-eslint/types" "6.9.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== JSONStream@1.3.2: version "1.3.2" @@ -955,15 +1201,25 @@ abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== adm-zip@^0.4.16: version "0.4.16" @@ -990,6 +1246,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.12.4, ajv@^6.12.6: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1026,6 +1302,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +antlr4@^4.11.0: + version "4.13.1" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d" + integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA== + antlr4@~4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.8.0.tgz#f938ec171be7fc2855cd3a533e87647185b32b6a" @@ -1042,9 +1323,9 @@ any-promise@^1.0.0: integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1069,7 +1350,75 @@ array-back@^4.0.1, array-back@^4.0.2: resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== -asn1@^0.2.4: +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asn1@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== @@ -1081,25 +1430,26 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" +ast-parents@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + axios@^0.21.1: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" @@ -1136,17 +1486,15 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bigint-crypto-utils@^3.0.23: - version "3.1.7" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz#c4c1b537c7c1ab7aadfaecf3edfd45416bf2c651" - integrity sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA== - dependencies: - bigint-mod-arith "^3.1.0" +big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== -bigint-mod-arith@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz#658e416bc593a463d97b59766226d0a3021a76b1" - integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== binary-extensions@^2.0.0: version "2.2.0" @@ -1193,6 +1541,13 @@ bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1307,36 +1662,47 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -buildcheck@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.3.tgz#70451897a95d80f7807e68fc412eb2e7e35ff4d5" - integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== +buildcheck@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== dependencies: - streamsearch "^1.1.0" + run-applescript "^5.0.0" bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + catering@^2.1.0, catering@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" @@ -1350,19 +1716,19 @@ chai-as-promised@^7.1.1: check-error "^1.0.2" chai@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + version "4.3.8" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" + integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" - deep-eql "^3.0.1" + deep-eql "^4.1.2" get-func-name "^2.0.0" loupe "^2.3.1" pathval "^1.1.1" type-detect "^4.0.5" -chalk@4.1.2, chalk@^4.1.0: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1418,14 +1784,14 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: safe-buffer "^5.0.1" classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== dependencies: abstract-level "^1.0.2" catering "^2.1.0" module-error "^1.0.1" - napi-macros "~2.0.0" + napi-macros "^2.2.2" node-gyp-build "^4.3.0" clean-stack@^2.0.0: @@ -1501,12 +1867,22 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.19.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +commander@~9.4.1: version "9.4.1" resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== @@ -1536,13 +1912,23 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cpu-features@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.4.tgz#0023475bb4f4c525869c162e4108099e35bf19d8" - integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +cpu-features@~0.0.8: + version "0.0.9" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.9.tgz#5226b92f0f1c63122b0a3eb84cb8335a4de499fc" + integrity sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ== dependencies: - buildcheck "0.0.3" - nan "^2.15.0" + buildcheck "~0.0.6" + nan "^2.17.0" crc-32@^1.2.0: version "1.2.2" @@ -1577,14 +1963,23 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.2.6: +debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -1601,25 +1996,64 @@ decimal.js-light@^2.5.0: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-eql@^4.0.1: +deep-eql@^4.0.1, deep-eql@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" -deep-extend@~0.6.0: +deep-extend@^0.6.0, deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" + +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -1635,6 +2069,13 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + docker-modem@^1.0.8: version "1.0.9" resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8" @@ -1646,9 +2087,9 @@ docker-modem@^1.0.8: split-ca "^1.0.0" docker-modem@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-3.0.6.tgz#8c76338641679e28ec2323abb65b3276fb1ce597" - integrity sha512-h0Ow21gclbYsZ3mkHDfsYNDqtRhXS8fXr51bU0qr1dxgTMJj0XufbzX+jhNOvA8KuEEzn6JbvLVhXyv+fny9Uw== + version "3.0.8" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-3.0.8.tgz#ef62c8bdff6e8a7d12f0160988c295ea8705e77a" + integrity sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ== dependencies: debug "^4.1.1" readable-stream "^3.5.0" @@ -1665,14 +2106,28 @@ dockerode@^2.5.8: tar-fs "~1.16.3" dockerode@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-3.3.4.tgz#875de614a1be797279caa9fe27e5637cf0e40548" - integrity sha512-3EUwuXnCU+RUlQEheDjmBE0B7q66PV9Rw5NiH1sXwINq0M9c5ERP9fxgkw36ZHOtzf4AGEEYySnkx/sACC9EgQ== + version "3.3.5" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-3.3.5.tgz#7ae3f40f2bec53ae5e9a741ce655fff459745629" + integrity sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA== dependencies: "@balena/dockerignore" "^1.0.2" docker-modem "^3.0.0" tar-fs "~2.0.1" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -1686,11 +2141,6 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^10.1.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f" - integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1703,18 +2153,109 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +enhanced-resolve@^5.12.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +entities@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -1730,6 +2271,156 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" + integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" + get-tsconfig "^4.5.0" + is-core-module "^2.11.0" + is-glob "^4.0.3" + +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-prettier@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515" + integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.5" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.51.0: + version "8.52.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" + integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.52.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -1752,14 +2443,14 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" ethereumjs-abi@^0.6.8: version "0.6.8" @@ -1782,10 +2473,10 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" - integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== +ethers@^5.7.0, ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== dependencies: "@ethersproject/abi" "5.7.0" "@ethersproject/abstract-provider" "5.7.0" @@ -1805,7 +2496,7 @@ ethers@^5.7.0: "@ethersproject/networks" "5.7.1" "@ethersproject/pbkdf2" "5.7.0" "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.1" + "@ethersproject/providers" "5.7.2" "@ethersproject/random" "5.7.0" "@ethersproject/rlp" "5.7.0" "@ethersproject/sha2" "5.7.0" @@ -1839,7 +2530,47 @@ evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -fast-glob@^3.2.12: +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2, fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== @@ -1850,6 +2581,16 @@ fast-glob@^3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -1857,6 +2598,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1871,7 +2619,7 @@ find-replace@^3.0.0: dependencies: array-back "^3.0.1" -find-up@5.0.0: +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -1886,16 +2634,37 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -flat@^5.0.2: +flat-cache@^3.0.4: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" + integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + follow-redirects@^1.12.1, follow-redirects@^1.14.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -1956,20 +2725,40 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -1980,14 +2769,40 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stdin@~9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.5.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -1996,6 +2811,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -2032,6 +2854,61 @@ glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@~8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -2042,24 +2919,29 @@ graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -hardhat@^2.11.0: - version "2.11.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.2.tgz#c81388630255823bb1717ec07c4ee651b1fbe97f" - integrity sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +hardhat@=2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.16.0.tgz#c5611d433416b31f6ce92f733b1f1b5236ad6230" + integrity sha512-7VQEJPQRAZdtrYUZaU9GgCpP3MBNy/pTdscARNJQMWKj5C+R7V32G5uIZKIqZ4QiqXa6CBfxxe+G+ahxUbHZHA== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@nomicfoundation/ethereumjs-vm" "^6.0.0" - "@nomicfoundation/solidity-analyzer" "^0.0.3" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-vm" "7.0.1" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" @@ -2086,7 +2968,6 @@ hardhat@^2.11.0: mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" @@ -2094,10 +2975,15 @@ hardhat@^2.11.0: source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" - undici "^5.4.0" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2108,11 +2994,30 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.3: +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2137,6 +3042,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -2170,6 +3082,16 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -2182,10 +3104,28 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^5.2.0, ignore@^5.2.4, ignore@~5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -2205,6 +3145,20 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" + integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -2212,6 +3166,27 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2219,18 +3194,55 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2241,7 +3253,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2253,43 +3265,184 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-yaml@4.1.0: +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonc-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -2319,14 +3472,21 @@ jsonparse@^1.2.0: integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== keccak@^3.0.0, keccak@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -2355,6 +3515,26 @@ level@^8.0.0: browser-level "^1.0.1" classic-level "^1.2.0" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== + dependencies: + uc.micro "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -2375,7 +3555,17 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15: +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2389,9 +3579,9 @@ log-symbols@4.1.0: is-unicode-supported "^0.1.0" loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" @@ -2419,6 +3609,39 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +markdown-it@13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== + dependencies: + argparse "^2.0.1" + entities "~3.0.1" + linkify-it "^4.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +markdownlint-cli@^0.33.0: + version "0.33.0" + resolved "https://registry.yarnpkg.com/markdownlint-cli/-/markdownlint-cli-0.33.0.tgz#703af1234c32c309ab52fcd0e8bc797a34e2b096" + integrity sha512-zMK1oHpjYkhjO+94+ngARiBBrRDEUMzooDHBAHtmEIJ9oYddd9l3chCReY2mPlecwH7gflQp1ApilTo+o0zopQ== + dependencies: + commander "~9.4.1" + get-stdin "~9.0.0" + glob "~8.0.3" + ignore "~5.2.4" + js-yaml "^4.1.0" + jsonc-parser "~3.2.0" + markdownlint "~0.27.0" + minimatch "~5.1.2" + run-con "~1.2.11" + +markdownlint@~0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.27.0.tgz#9dabf7710a4999e2835e3c68317f1acd0bc89049" + integrity sha512-HtfVr/hzJJmE0C198F99JLaeada+646B5SaG2pVoEakLFI6iRGsvMqrnnrflq8hm1zQgwskEgqSnhDW11JBp0w== + dependencies: + markdown-it "13.0.1" + mcl-wasm@^0.7.1: version "0.7.9" resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" @@ -2433,6 +3656,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + memory-level@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" @@ -2447,7 +3675,12 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -merge2@^1.3.0: +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -2460,6 +3693,16 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2477,13 +3720,20 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1, minimatch@~5.1.2: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^7.4.3: version "7.4.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" @@ -2491,10 +3741,10 @@ minimatch@^7.4.3: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp-classic@^0.5.2: version "0.5.3" @@ -2526,11 +3776,10 @@ mnemonist@^0.38.0: obliterator "^2.0.0" mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" @@ -2577,7 +3826,7 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.15.0, nan@^2.16.0: +nan@^2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== @@ -2587,10 +3836,15 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== node-addon-api@^2.0.0: version "2.0.2" @@ -2598,31 +3852,88 @@ node-addon-api@^2.0.0: integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-fetch@^2.6.0: - version "2.6.8" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" - integrity sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" obliterator@^2.0.0: version "2.0.4" @@ -2636,6 +3947,42 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== + dependencies: + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + ordinal@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" @@ -2693,6 +4040,23 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -2713,11 +4077,26 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathington@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/pathington/-/pathington-1.1.7.tgz#caf2d2db899a31fea4e81e3657af6acde5171903" @@ -2739,11 +4118,26 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + preprocess@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/preprocess/-/preprocess-3.2.0.tgz#36b3e2c52331fbc6fabb26d4fd5709304b7e3675" @@ -2751,28 +4145,37 @@ preprocess@^3.2.0: dependencies: xregexp "3.1.0" -prettier-plugin-solidity@^1.0.0-alpha.27: - version "1.0.0-rc.1" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-rc.1.tgz#97b6129430b262cb0b25cc4c865f9515be9c6ede" - integrity sha512-horUGyCBbfNHWvJ44UVEcsfVySEoG2gxGs7TcBfTZWNvD4VU6rjzwAkrUtKV6VvRZWn9dh01XZ2UhhB3eVnMXQ== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: - "@solidity-parser/parser" "^0.14.5" - emoji-regex "^10.1.0" - escape-string-regexp "^4.0.0" - semver "^7.3.7" + fast-diff "^1.1.2" + +prettier-plugin-solidity@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" + integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== + dependencies: + "@solidity-parser/parser" "^0.16.0" + semver "^7.3.8" solidity-comments-extractor "^0.0.7" - string-width "^4.2.3" -prettier@^2.1.2, prettier@^2.3.0: +prettier@^2.1.2: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== -prettier@^2.3.1: +prettier@^2.3.1, prettier@^2.8.3: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -2803,12 +4206,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -qs@^6.7.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" @@ -2823,9 +4224,9 @@ randombytes@^2.1.0: safe-buffer "^5.1.0" raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -2833,9 +4234,9 @@ raw-body@^2.4.1: unpipe "1.0.0" readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -2846,9 +4247,9 @@ readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: util-deprecate "~1.0.1" readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -2876,16 +4277,35 @@ reduce-flatten@^2.0.0: resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0: +require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve@1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -2894,11 +4314,20 @@ resolve@1.17.0: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.8.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -2919,6 +4348,13 @@ rimraf@^2.2.8: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -2934,6 +4370,23 @@ rlp@^2.2.3: dependencies: bn.js "^5.2.0" +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + +run-con@~1.2.11: + version "1.2.12" + resolved "https://registry.yarnpkg.com/run-con/-/run-con-1.2.12.tgz#51c319910e45a3bd71ee773564a89d96635c8c64" + integrity sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg== + dependencies: + deep-extend "^0.6.0" + ini "~3.0.0" + minimist "^1.2.8" + strip-json-comments "~3.1.1" + run-parallel-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" @@ -2953,6 +4406,16 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -2963,6 +4426,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -2983,23 +4455,16 @@ secp256k1@^4.0.1: node-gyp-build "^4.2.0" semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.1: +semver@^7.3.8, semver@^7.5.1, semver@^7.5.2, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3013,6 +4478,25 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -3031,6 +4515,18 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -3040,11 +4536,25 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -3060,6 +4570,31 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" +solhint@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.6.2.tgz#2b2acbec8fdc37b2c68206a71ba89c7f519943fe" + integrity sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ== + dependencies: + "@solidity-parser/parser" "^0.16.0" + ajv "^6.12.6" + antlr4 "^4.11.0" + ast-parents "^0.0.1" + chalk "^4.1.2" + commander "^10.0.0" + cosmiconfig "^8.0.0" + fast-diff "^1.2.0" + glob "^8.0.3" + ignore "^5.2.4" + js-yaml "^4.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + semver "^7.5.2" + strip-ansi "^6.0.1" + table "^6.8.1" + text-table "^0.2.0" + optionalDependencies: + prettier "^2.8.3" + solidity-comments-extractor@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" @@ -3099,15 +4634,15 @@ split-ca@^1.0.0, split-ca@^1.0.1: integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== ssh2@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.11.0.tgz#ce60186216971e12f6deb553dcf82322498fe2e4" - integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== + version "1.14.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.14.0.tgz#8f68440e1b768b66942c9e4e4620b2725b3555bb" + integrity sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA== dependencies: - asn1 "^0.2.4" + asn1 "^0.2.6" bcrypt-pbkdf "^1.0.2" optionalDependencies: - cpu-features "~0.0.4" - nan "^2.16.0" + cpu-features "~0.0.8" + nan "^2.17.0" stacktrace-parser@^0.1.10: version "0.1.10" @@ -3121,11 +4656,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - string-format@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" @@ -3140,6 +4670,33 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -3166,6 +4723,21 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -3173,7 +4745,7 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -3204,6 +4776,14 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" + table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" @@ -3214,6 +4794,22 @@ table-layout@^1.0.2: typical "^5.2.0" wordwrapjs "^4.0.0" +table@^6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + tar-fs@~1.16.3: version "1.16.3" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" @@ -3268,6 +4864,11 @@ template-file@^6.0.1: mkdirp "^1.0.4" p-limit "^4.0.0" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -3287,6 +4888,11 @@ thenify-all@^1.0.0: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== + tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -3316,6 +4922,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + ts-command-line-args@^2.2.0: version "2.5.1" resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" @@ -3378,11 +4989,26 @@ ts-node@^10.7.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.5.0, tslib@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" @@ -3403,11 +5029,23 @@ tweetnacl@^1.0.3: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -3434,15 +5072,54 @@ typechain@^8.1.1: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.6.4: - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typical@^4.0.0: version "4.0.0" @@ -3454,12 +5131,27 @@ typical@^5.2.0: resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== -undici@^5.4.0: - version "5.11.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.11.0.tgz#1db25f285821828fc09d3804b9e2e934ae86fc13" - integrity sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw== +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici@^5.14.0: + version "5.26.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.26.4.tgz#dc861c35fb53ae025a173a790d984aa9b2e279a1" + integrity sha512-OG+QOf0fTLtazL9P9X7yqWxQ+Z0395Wk6DSkyTxtaq3wQEjIroVe7Y4asCX/vcCxYpNGMnwz8F0qbRYUoaQVMw== dependencies: - busboy "^1.6.0" + "@fastify/busboy" "^2.0.0" universalify@^0.1.0: version "0.1.2" @@ -3476,6 +5168,18 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -3504,6 +5208,35 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wordwrapjs@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 00000000..bc962f33 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2023-07-23" +components = ["rustfmt", "clippy"] \ No newline at end of file diff --git a/scripts/refresh_contracts.sh b/scripts/refresh_contracts.sh index 2b6b49ba..fb9e3312 100755 --- a/scripts/refresh_contracts.sh +++ b/scripts/refresh_contracts.sh @@ -12,7 +12,7 @@ for contract in "${contracts[@]}"; do cp $SRC_DIR/$contract.sol/$contract.json $DST_DIR done -precompiles=("Ecrecover" "Keccak256" "SHA256") +precompiles=("EcAdd" "EcMul" "Ecrecover" "Keccak256" "SHA256") for precompile in "${precompiles[@]}"; do cp etc/system-contracts/contracts/precompiles/artifacts/$precompile.yul/$precompile.yul.zbin $DST_DIR diff --git a/src/bootloader_debug.rs b/src/bootloader_debug.rs index d093c593..c83b9a80 100644 --- a/src/bootloader_debug.rs +++ b/src/bootloader_debug.rs @@ -1,11 +1,11 @@ +use multivm::interface::{dyn_tracers::vm_1_4_0::DynTracer, tracer::VmExecutionStopReason}; use std::sync::Arc; -use once_cell::sync::OnceCell; -use vm::{ - constants::BOOTLOADER_HEAP_PAGE, BootloaderState, DynTracer, ExecutionEndTracer, - ExecutionProcessing, HistoryMode, SimpleMemory, VmExecutionResultAndLogs, - VmExecutionStopReason, VmTracer, ZkSyncVmState, +use multivm::vm_latest::{ + constants::BOOTLOADER_HEAP_PAGE, BootloaderState, HistoryMode, SimpleMemory, VmTracer, + ZkSyncVmState, }; +use once_cell::sync::OnceCell; use zksync_basic_types::U256; use zksync_state::WriteStorage; @@ -82,11 +82,15 @@ pub struct BootloaderDebugTracer { pub result: Arc>>, } -impl DynTracer for BootloaderDebugTracer {} +impl DynTracer> for BootloaderDebugTracer {} -impl ExecutionEndTracer for BootloaderDebugTracer {} +fn load_debug_slot(memory: &SimpleMemory, slot: usize) -> U256 { + memory + .read_slot(BOOTLOADER_HEAP_PAGE as usize, DEBUG_START_SLOT + slot) + .value +} -impl ExecutionProcessing for BootloaderDebugTracer { +impl VmTracer for BootloaderDebugTracer { fn after_vm_execution( &mut self, state: &mut ZkSyncVmState, @@ -99,16 +103,6 @@ impl ExecutionProcessing for BootloaderDe } } -fn load_debug_slot(memory: &SimpleMemory, slot: usize) -> U256 { - memory - .read_slot(BOOTLOADER_HEAP_PAGE as usize, DEBUG_START_SLOT + slot) - .value -} - -impl VmTracer for BootloaderDebugTracer { - fn save_results(&mut self, _result: &mut VmExecutionResultAndLogs) {} -} - impl BootloaderDebug { pub fn load_from_memory( memory: &SimpleMemory, diff --git a/src/cache.rs b/src/cache.rs index 4e9fd2bc..713bc850 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -50,6 +50,7 @@ pub(crate) struct Cache { block_raw_transactions: FxHashMap>, transactions: FxHashMap, bridge_addresses: Option, + confirmed_tokens: FxHashMap<(u32, u8), Vec>, } impl Cache { @@ -158,6 +159,32 @@ impl Cache { self.block_raw_transactions.get(number) } + /// Returns the cached confirmed tokens. + pub(crate) fn get_confirmed_tokens( + &self, + from: u32, + limit: u8, + ) -> Option<&Vec> { + if matches!(self.config, CacheConfig::None) { + return None; + } + self.confirmed_tokens.get(&(from, limit)) + } + + /// Cache confirmed tokens + pub(crate) fn set_confirmed_tokens( + &mut self, + from: u32, + limit: u8, + confirmed_tokens: Vec, + ) { + if matches!(self.config, CacheConfig::None) { + return; + } + self.confirmed_tokens + .insert((from, limit), confirmed_tokens); + } + /// Cache the raw transactions for the provided block number. pub(crate) fn insert_block_raw_transactions( &mut self, diff --git a/src/configuration_api.rs b/src/configuration_api.rs deleted file mode 100644 index 868c7b95..00000000 --- a/src/configuration_api.rs +++ /dev/null @@ -1,231 +0,0 @@ -// Built-in uses -use std::sync::{Arc, RwLock}; - -// External uses -use jsonrpc_core::Result; -use jsonrpc_derive::rpc; -use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; -use zksync_web3_decl::error::Web3Error; - -// Workspace uses - -// Local uses -use crate::{ - node::InMemoryNodeInner, - node::ShowCalls, - node::ShowVMDetails, - node::{ShowGasDetails, ShowStorageLogs}, - observability::LogLevel, -}; - -pub struct ConfigurationApiNamespace { - node: Arc>>, -} - -impl ConfigurationApiNamespace { - pub fn new(node: Arc>>) -> Self { - Self { node } - } -} - -#[rpc] -pub trait ConfigurationApiNamespaceT { - /// Get the InMemoryNodeInner's show_calls property as a string - /// - /// # Returns - /// The current `show_calls` value for the InMemoryNodeInner. - #[rpc(name = "config_getShowCalls", returns = "String")] - fn config_get_show_calls(&self) -> Result; - - /// Get the InMemoryNodeInner's current_timestamp property - /// - /// # Returns - /// The current `current_timestamp` value for the InMemoryNodeInner. - #[rpc(name = "config_getCurrentTimestamp", returns = "u64")] - fn config_get_current_timestamp(&self) -> Result; - - /// Set show_calls for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowCalls enum to update show_calls to - /// - /// # Returns - /// The updated/current `show_calls` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowCalls", returns = "String")] - fn config_set_show_calls(&self, value: String) -> Result; - - /// Set show_storage_logs for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowStorageLogs enum to update show_storage_logs to - /// - /// # Returns - /// The updated/current `show_storage_logs` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowStorageLogs", returns = "String")] - fn config_set_show_storage_logs(&self, value: String) -> Result; - - /// Set show_vm_details for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowVMDetails enum to update show_vm_details to - /// - /// # Returns - /// The updated/current `show_vm_details` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowVmDetails", returns = "String")] - fn config_set_show_vm_details(&self, value: String) -> Result; - - /// Set show_gas_details for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowGasDetails enum to update show_gas_details to - /// - /// # Returns - /// The updated/current `show_gas_details` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowGasDetails", returns = "String")] - fn config_set_show_gas_details(&self, value: String) -> Result; - - /// Set resolve_hashes for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A bool to update resolve_hashes to - /// - /// # Returns - /// The updated `resolve_hashes` value for the InMemoryNodeInner. - #[rpc(name = "config_setResolveHashes", returns = "bool")] - fn config_set_resolve_hashes(&self, value: bool) -> Result; - - /// Set the logging for the InMemoryNodeInner - /// - /// # Parameters - /// - `level`: The log level to set. One of: ["trace", "debug", "info", "warn", "error"] - /// - /// # Returns - /// `true` if the operation succeeded, `false` otherwise. - #[rpc(name = "config_setLogLevel", returns = "bool")] - fn config_set_log_level(&self, level: LogLevel) -> Result; - - /// Set the logging for the InMemoryNodeInner - /// - /// # Parameters - /// - `level`: The logging directive to set. Example: - /// * "my_crate=debug" - /// * "my_crate::module=trace" - /// * "my_crate=debug,other_crate=warn" - /// - /// # Returns - /// `true` if the operation succeeded, `false` otherwise. - #[rpc(name = "config_setLogging", returns = "bool")] - fn config_set_logging(&self, directive: String) -> Result; -} - -impl ConfigurationApiNamespaceT - for ConfigurationApiNamespace -{ - fn config_get_show_calls(&self) -> Result { - let reader = self.node.read().unwrap(); - Ok(reader.show_calls.to_string()) - } - - fn config_get_current_timestamp(&self) -> Result { - let reader = self.node.read().unwrap(); - Ok(reader.current_timestamp) - } - - fn config_set_show_calls(&self, value: String) -> Result { - let show_calls = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_calls.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_calls = show_calls; - Ok(inner.show_calls.to_string()) - } - - fn config_set_show_storage_logs(&self, value: String) -> Result { - let show_storage_logs = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_storage_logs.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_storage_logs = show_storage_logs; - Ok(inner.show_storage_logs.to_string()) - } - - fn config_set_show_vm_details(&self, value: String) -> Result { - let show_vm_details = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_vm_details.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_vm_details = show_vm_details; - Ok(inner.show_vm_details.to_string()) - } - - fn config_set_show_gas_details(&self, value: String) -> Result { - let show_gas_details = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_gas_details.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_gas_details = show_gas_details; - Ok(inner.show_gas_details.to_string()) - } - - fn config_set_resolve_hashes(&self, value: bool) -> Result { - let mut inner = self.node.write().unwrap(); - inner.resolve_hashes = value; - Ok(inner.resolve_hashes) - } - - fn config_set_log_level(&self, level: LogLevel) -> Result { - if let Some(observability) = &self - .node - .read() - .map_err(|_| into_jsrpc_error(Web3Error::InternalError))? - .observability - { - match observability.set_log_level(level.clone()) { - Ok(_) => tracing::info!("set log level to '{}'", level), - Err(err) => { - tracing::error!("failed setting log level {:?}", err); - return Ok(false); - } - } - } - Ok(true) - } - - fn config_set_logging(&self, directive: String) -> Result { - if let Some(observability) = &self - .node - .read() - .map_err(|_| into_jsrpc_error(Web3Error::InternalError))? - .observability - { - match observability.set_logging(&directive) { - Ok(_) => tracing::info!("set logging to '{}'", directive), - Err(err) => { - tracing::error!("failed setting logging to '{}': {:?}", directive, err); - return Ok(false); - } - } - } - Ok(true) - } -} diff --git a/src/deps/contracts/AccountCodeStorage.json b/src/deps/contracts/AccountCodeStorage.json index 61372171..b30e4be2 100644 --- a/src/deps/contracts/AccountCodeStorage.json +++ b/src/deps/contracts/AccountCodeStorage.json @@ -110,8 +110,8 @@ "type": "function" } ], - "bytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000000030210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000020320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab50fa76bcb7e06b47bab35dc6b1c5088e6df5f505ae348ae7035a329122d208", - "deployedBytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000000030210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000020320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab50fa76bcb7e06b47bab35dc6b1c5088e6df5f505ae348ae7035a329122d208", + "bytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000001000210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000ff0320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003feb461a4c407970c4055ef207f89a1b4d8d50098197240a59e39b0630ca7988", + "deployedBytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000001000210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000ff0320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003feb461a4c407970c4055ef207f89a1b4d8d50098197240a59e39b0630ca7988", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/BootloaderUtilities.json b/src/deps/contracts/BootloaderUtilities.json index 4e7353c7..31da8323 100644 --- a/src/deps/contracts/BootloaderUtilities.json +++ b/src/deps/contracts/BootloaderUtilities.json @@ -110,8 +110,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f727465642074782074797065000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000489bc9fb7e3517c248d1d2be1896ed4d64fc66e2e08d832a584baa46f011fd03", - "deployedBytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f727465642074782074797065000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000489bc9fb7e3517c248d1d2be1896ed4d64fc66e2e08d832a584baa46f011fd03", + "bytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f72746564207478207479706500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052b2bf42e5ab5127f48669ab36579badd217fbd10998091dbba6028927708cf2", + "deployedBytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f72746564207478207479706500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052b2bf42e5ab5127f48669ab36579badd217fbd10998091dbba6028927708cf2", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/ComplexUpgrader.json b/src/deps/contracts/ComplexUpgrader.json index 697d2a07..137c2845 100644 --- a/src/deps/contracts/ComplexUpgrader.json +++ b/src/deps/contracts/ComplexUpgrader.json @@ -22,8 +22,8 @@ "type": "function" } ], - "bytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b36fc6c54af58cb069c5e43b7bfc1607cf0bb46abfb0a8df94fd31e5cdd5ecd0", - "deployedBytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b36fc6c54af58cb069c5e43b7bfc1607cf0bb46abfb0a8df94fd31e5cdd5ecd0", + "bytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3ae095b702686e9c828067f7814feec49aed4be7494fed7813e54a61aa5fdd3", + "deployedBytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3ae095b702686e9c828067f7814feec49aed4be7494fed7813e54a61aa5fdd3", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/Compressor.json b/src/deps/contracts/Compressor.json index 07f92735..aaea9846 100644 --- a/src/deps/contracts/Compressor.json +++ b/src/deps/contracts/Compressor.json @@ -62,8 +62,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c69642064617461009653619bd04c52d3ed6cde1b1628c851e936eb3bb9ece5df74fe5096b80d5991", - "deployedBytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c69642064617461009653619bd04c52d3ed6cde1b1628c851e936eb3bb9ece5df74fe5096b80d5991", + "bytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c6964206461746100b4d4241d8a2da2cf3e1bf35dd302345ffbb506f1f41300f3c5e72d9a0e037dc2", + "deployedBytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c6964206461746100b4d4241d8a2da2cf3e1bf35dd302345ffbb506f1f41300f3c5e72d9a0e037dc2", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/ContractDeployer.json b/src/deps/contracts/ContractDeployer.json index 444ab0c6..fa7be3ad 100644 --- a/src/deps/contracts/ContractDeployer.json +++ b/src/deps/contracts/ContractDeployer.json @@ -211,6 +211,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_keccak256BytecodeHash", + "type": "bytes32" + } + ], + "name": "forceDeployKeccak256", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { @@ -412,8 +425,8 @@ "type": "function" } ], - "bytecode": "0x00050000000000020009000000000002000000000301001900000060033002700000055d04300197000400000041035500030000000103550000055d0030019d000200000002001f000100000000001f0000008001000039000000400010043f0000000101200190000000630000c13d0000000002000031000000040120008c0000040f0000413d0000000301000367000000000301043b000000e0033002700000055f0430009c0000006b0000213d000005670430009c000000ab0000213d0000056b0430009c000001620000613d0000056c0430009c000002ca0000613d0000056d0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000003b0000c13d000005910120009c000002b50000813d000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d00000000003104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d020000390000000203000039000005a8040000410000000805000029156f155a0000040f00000001012001900000040f0000613d000000a90000013d0000000001000416000000000101004b0000040f0000c13d0000002001000039000001000010044300000120000004430000055e01000041000015700001042e000005600430009c0000000004000410000900000004001d000000e30000213d000005640430009c000001840000613d000005650430009c000003540000613d000005660330009c0000040f0000c13d000000040320008a0000056e04000041000000200530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000e04043b0000056f04e0009c0000040f0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000040f0000213d000000090500008a0000000004000411000000000554016f000080070550008c000004e80000c13d00000000050e004b0000051c0000c13d0000000001000416000000000101004b000006b70000c13d0000000001000019000015700001042e000005680430009c000002080000613d000005690130009c000003e30000613d0000056a0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d0000000002000031000000040120008a0000056e03000041000000800410008c000000000400001900000000040340190000056e01100197000000000501004b000000000300a0190000056e0110009c00000000010400190000000001036019000000000101004b0000040f0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005700330009c0000040f0000213d0000006401100370000000000101043b0000056f0310009c0000040f0000213d0000000401100039156f0ae20000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019156f0afd0000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000005610430009c000002980000613d000005620430009c000004020000613d000005630330009c0000040f0000c13d000000040320008a0000056e04000041000000400530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b000800000003001d0000056f0330009c0000040f0000213d00000008030000290000000002320049000700000002001d000000040220008a0000056e03000041000000a00420008c000000000400001900000000040340190000056e02200197000000000502004b000000000300a0190000056e0220009c00000000020400190000000002036019000000000202004b0000040f0000c13d0000002402100370000000000202043b000600000002001d000005700220009c0000040f0000213d00000000020004110000000903000029000000000232004b000004de0000c13d00000008020000290000000402200039000000000121034f000000000201043b0000057401000041000000800010043f000500000002001d000000840020043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800402000039156f155f0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001360000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000012e0000413d000000000705004b000001450000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004f60000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200230008c0000040f0000413d000000800200043d000000000202004b0000071b0000c13d00000571020000410000000404000029000000000024043500000084021001bf00000020030000390000000000320435000000c40210003900000590030000410000000000320435000000a4011000390000001a02000039000000000021043500000040014002100000057b011001c700001571000104300000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000400310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000003020003670000000401200370000000000101043b000005700310009c0000040f0000213d0000002402200370000000000202043b156f0bd80000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000800000001001d0000056f0110009c0000040f0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000001bb0000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000600000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001dc0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001d40000413d000000000705004b000001eb0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000061f0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000601000029156f0bd80000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029156f0c040000040f00000006010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000700000004001d0000056f0440009c0000040f0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000002470000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000400000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000002680000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002600000413d000000000705004b000002770000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cf0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029156f10ac0000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000044e0000c13d0000ffff0120008c0000044e0000a13d000000400100043d0000006402100039000005a90300004100000000003204350000004402100039000005aa030000410000000000320435000000240210003900000024030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000700000001001d0000056f0110009c0000040f0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000003040000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003250000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000031d0000413d000000000705004b000003340000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006450000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029156f0c040000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005700110009c0000040f0000213d00000009010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007450000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007450000213d00000000001304350000000001020433000000010210008c000007450000213d0000000102000039000000400400043d000000000101004b000003dc0000c13d000005a50100004100000000001404350000000401400039000000090200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000900000004001d156f155f0000040f000000090a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b40000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ac0000413d000000000705004b000003c40000613d0000000506600210000000000761034f000000090800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007630000613d0000001f01400039000000600210018f00000009010000290000000001120019000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000200230008c0000040f0000413d00000009020000290000000002020433000000000202004b00000000020000190000000102006039000000000401001900000000002404350000055d010000410000055d0240009c0000000001044019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000005700210009c0000040f0000213d000000400200043d000005a60320009c000004ae0000413d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b000004110000613d000000000100001900001571000104300000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000800000004001d0000056f0440009c0000040f0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000004400000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b0000066b0000c13d0000057101000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005aa01000041000000c40010043f000005a901000041000000e40010043f000005ab010000410000157100010430000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400400043d000005870240009c000003fc0000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007450000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007450000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c0000074b0000c13d000000000101004b0000074b0000c13d00000001020000390000000701000029000900000002001d0000000000210435000000080100002900000570011001970000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007450000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d000000090200002900000000002104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d02000039000000020300003900000599040000410000000805000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007450000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007450000213d00000000003104350000000003020433000000010230008c000007450000213d000000400200043d00000000033204360000000001010433000000010410008c000007450000213d00000000001304350000055d010000410000055d0320009c00000000010240190000004001100210000005a7011001c7000015700001042e0000057101000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000057201000041000000c40010043f000005730100004100001571000104300000057101000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f0000059a01000041000000c40010043f0000059b01000041000000e40010043f0000059c01000041000001040010043f0000059d010000410000157100010430000000400200043d0000001f0430018f0000000503300272000005030000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004fb0000413d000000000504004b000005120000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b0000056e09000041000000000a58004b000000000a000019000000000a0980190000056e0b5001970000056e0c800197000000000dbc004b0000000009008019000000000bbc013f0000056e0bb0009c00000000090ac019000000000909004b0000040f0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000008810000c13d00000001077000390000000008e7004b000005210000413d0000000001000416000000000161004b000006b70000c13d000000c30100008a0000000001310049000200000001001d0000057001400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b000000020300002900000000033000310000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000002f20019000700000002001d0000006002200039000600000002001d000000000121034f000000000101043b000300000001001d00000578010000410000000000100439000000090100002900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000800000009001d156f155f0000040f000000070b0000290000000809000029000000040f000029000000050e00002900000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400a00043d0000059e0100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005700210009c0000040f0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000008402a00039000000000012043500000006010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b0000056e05000041000000000643004b000000000600001900000000060580190000056e044001970000056e07300197000000000847004b0000000005008019000000000447013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000003b30019000000000131034f000000000101043b0000056f0410009c0000040f0000213d000000200330003900000000021200490000056e04000041000000000523004b000000000500001900000000050420190000056e022001970000056e06300197000000000726004b0000000004008019000000000226013f0000056e0220009c00000000020500190000000002046019000000000202004b0000040f0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000005d70000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000005cf0000413d0000001f05100190000005e60000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000903000029000000040330008c000006180000613d0000001f01100039000000200300008a000000000131016f0000059f030000410000059f0410009c00000000010380190000055d030000410000055d04a0009c00070000000a001d000000000403001900000000040a401900000040044002100000006001100210000000000141019f0000055d0420009c0000000002038019000000c002200210000000000121019f000005a0011000410000000303000029000000000203004b0000060b0000613d0000058e011001c7000080090200003900000009040000290000000005000019156f155a0000040f0000060d0000013d0000000902000029156f155a0000040f0004000000010355000000000301001900000060033002700001055d0030019d0000055d043001970000000102200190000000050e000029000000040f0000290000000809000029000000070a000029000008140000613d0000056f01a0009c000003fc0000213d0000004000a0043f00000001099000390000000001e9004b000005490000413d000000a90000013d000000400200043d0000001f0430018f00000005033002720000062c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006240000413d000000000504004b0000063b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000006520000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000064a0000413d000000000504004b000006610000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000068a0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000006820000413d000000000705004b000006990000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006f50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000501000029156f0bd80000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029156f10ac0000040f00000005010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000400100043d0000008402100039000005a20300004100000000003204350000006402100039000005a30300004100000000003204350000004402100039000005a4030000410000000000320435000000240210003900000045030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000006dc0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d40000413d000000000504004b000006eb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000007020000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006fa0000413d000000000504004b000007110000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000c002100039000000400020043f00000004020000290000000000020435000000a001100039000200000001001d000000000001043500000008010000290000002401100039000100000001001d0000000301100367000000000101043b000300000001001d000005700110009c0000040f0000213d00000003010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000004020000290000000002020433000000010320008c000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000002020000290000000002020433000000010320008c000007890000a13d000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000000400100043d000000840210003900000594030000410000000000320435000000640210003900000595030000410000000000320435000000440210003900000596030000410000000000320435000000240210003900000043030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000007700000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007680000413d000000000504004b0000077f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000080100002900000084021000390000000301000367000000000221034f000000000202043b0000000703000029000000230330008a0000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d000000080300002900000000023200190000000403200039000000000331034f000000000303043b000700000003001d0000056f0330009c0000040f0000213d0000000703000029000000000330007900000024052000390000056e02000041000000000435004b000000000400001900000000040220190000056e03300197000400000005001d0000056e05500197000000000635004b0000000002008019000000000335013f0000056e0330009c000000000204c019000000000202004b0000040f0000c13d00000008020000290000004402200039000000000121034f000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000000002000416000800000002001d000000000101004b0000083a0000c13d0000000801000029000000000101004b000008870000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000002401400039000000050200002900000000002104350000058d0100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008fa0000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f00000001010000290000000301100367000000000701043b000005700170009c0000040f0000213d0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f0400004100000006050000290000000506000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d000000400200043d0000001f0340018f0000000504400272000008210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008190000413d000000000503004b000008300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000801000029000000000101004b0000089c0000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057c01000041000000000014043500000004014000390000000302000029000000000021043500000005010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039000200000002001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008d40000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000000801000029000000000101004b000008780000613d000000000100041600000580011001970000000000010417000000000100041400000007020000290000000403000029000000000232001a0000055d04300197000008810000413d0000000003000031000000000523004b000009460000813d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d00000064021000390000058a03000041000000000032043500000044021000390000058b030000410000000000320435000000240210003900000038030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000005780100004100000000001004390000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000302000029000000000021043500000009010000290000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000009200000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000083d0000013d000000400200043d0000001f0340018f0000000504400272000008e10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008d90000413d000000000503004b000008f00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000009070000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008ff0000413d000000000503004b000009160000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000092d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000009250000413d000000000503004b0000093c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000304400367000005810510009c0000095b0000413d000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c7000015710001043000000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af0000000302000029000000060d000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000a7b0000613d0000003f013000390000058401100197000000400200043d0000000001120019000700000002001d000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000070100002900000000073104360000001f013000390000000501100272000009890000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000009810000413d000900000007001d000000000100004b0000098c0000613d0000000101000031000000000113004b0000040f0000213d00000004020003670000001f0130018f00000005033002720000099d0000613d0000000004000019000000050540021000000009060000290000000006560019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000009940000413d000000000401004b000009ad0000613d0000000503300210000000000232034f000000090400002900000000033400190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000020200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d000005850100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000a960000613d00000008010000290000056f0110009c000003fc0000213d0000000801000029000000400010043f000000070100002900000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000040f0000c13d000000090200002900000000020204330000056f0320009c0000040f0000213d0000000903000029000000000131001900000000023200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d00000000230204340000056f0430009c000003fc0000213d00000005043002100000003f04400039000000200500008a000000000454016f000000080500002900000000045400190000056f0540009c000003fc0000213d000000400040043f0000000804000029000000000034043500000006033002100000000003230019000000000413004b0000040f0000213d000000000432004b00000a2f0000813d000000080400002900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b0000040f0000c13d000000400500043d000005870650009c000003fc0000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000a140000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400300043d000000240130003900000040020000390000000000210435000005880100004100000000001304350000000401300039000000030200002900000000002104350000000801000029000000000101043300000044023000390000000000120435000900000003001d0000006402300039000000000301004b00000a5e0000613d000000000300001900000008040000290000002004400039000800000004001d0000000004040433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000a520000413d000000090400002900000000014200490000055d020000410000055d0340009c0000000003020019000000000304401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000abc0000613d00000009010000290000056f0110009c000003fc0000213d000007fe0000013d0000001f0430018f000000050230027200000a860000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a7f0000413d000000000504004b00000a940000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000aa30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000a9b0000413d000000000503004b00000ab20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f000000050440027200000ac90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ac10000413d000000000503004b00000ad80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000001f031000390000056e04000041000000000523004b000000000500001900000000050440190000056e062001970000056e03300197000000000763004b000000000400a019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000afb0000613d0000000303100367000000000303043b0000056f0430009c00000afb0000213d00000020011000390000000004310019000000000224004b00000afb0000213d0000000002030019000000000001042d00000000010000190000157100010430000300000000000200000000070004140000000008450019000000000558004b000000000500001900000001050040390000055d04400197000000010550019000000b8b0000c13d0000000006000031000000000586004b00000b8b0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005810570009c00000b990000813d00000000028600490000055d0220019700000000022403df000000c0017002100000058201100197000005ac011001c700000000011203af0000801002000039156f15640000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000bab0000613d0000003f013000390000058402100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000056f0520009c00000b910000213d000000010440019000000b910000c13d000000400020043f00000000023104360000001f04300039000000050440027200000b3a0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000b320000413d000000000400004b00000b3c0000613d0000000104000031000000000443004b00000b970000213d00000004050003670000001f0430018f000000050330027200000b4c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000b440000413d000000000604004b00000b5b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c0000000304000029000000020500002900000bc60000c13d0000000002020433000000400100043d000000a0031000390000000000230435000000800210003900000000005204350000006002100039000000010300002900000000003204350000057002400197000000400310003900000000002304350000002002100039000005ae030000410000000000320435000000a0030000390000000000310435000005af0310009c00000b910000213d000000c003100039000000400030043f0000055d030000410000055d0420009c0000000002038019000000400220021000000000010104330000055d0410009c00000000010380190000006001100210000000000121019f00000000020004140000055d0420009c0000000002038019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000b970000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000004101000039000000040010043f0000058601000041000015710001043000000000010000190000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000bb60000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000baf0000413d000000000504004b00000bc40000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400100043d0000004402100039000005ad03000041000000000032043500000024021000390000001f030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c70000157100010430000000400300043d0000006004300039000000000024043500000570011001970000004002300039000000000012043500000060010000390000000001130436000005b0020000410000000000210435000005b10230009c00000bfc0000813d0000008002300039000000400020043f0000055d020000410000055d0410009c0000000001028019000000400110021000000000030304330000055d0430009c00000000030280190000006003300210000000000113019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000c020000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000000100001900001571000104300008000000000002000700000001001d000000000101004b00000ef70000613d000300000004001d000400000003001d000000400400043d000200000002001d00000570022001970000ffff0120008c00000f090000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c350000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c2d0000413d000000000705004b00000c440000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f1d0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c00000ee50000213d000000010110019000000ee50000c13d000000400040043f0000001f0130008c00000ee30000a13d00000000010a0433000000000101004b000000040140003900000f430000c13d000005b4020000410000000000240435000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c7d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c750000413d000000000705004b00000c8c0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f530000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000f790000c13d000005740100004100000000001404350000000401400039000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000cc00000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000cb80000413d000000000705004b00000ccf0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f8a0000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000fb00000613d000005870140009c00000ee50000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f0000000503000029000000010220019000000ee30000613d000000000101043b0000000002030433000000020320008c00000eeb0000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000eeb0000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b00000d790000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000103a0000613d00000001020000290000056f0120009c00000ee50000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010600000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f00000000010004160000058001100197000000000001041700000daa0000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010860000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d04400197000000010330019000000ef10000c13d0000000003000031000000000523004b00000ef10000413d0000000304400367000005810510009c00000fc10000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000202000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000fd30000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c00000ee50000213d000000010220019000000ee50000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000de90000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000de10000413d000000000100004b00000deb0000613d0000000101000031000000000113004b00000ee30000213d00000004020003670000001f0130018f000000050330027200000dfb0000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000df30000413d000000000401004b00000e0a0000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000fee0000613d00000006090000290000056f0190009c000000050100002900000ee50000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b000000040400002900000ee30000c13d00000000020404330000056f0320009c00000ee30000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000ee30000c13d00000000230204340000056f0430009c00000ee50000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c00000ee50000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000ee30000213d000000000432004b00000e890000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b00000ee30000c13d000000400500043d000005870650009c00000ee50000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000e6e0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f0000000606000029000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000eb50000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000eab0000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010140000613d00000006020000290000056f0120009c000000000102001900000ee50000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f000000010120019000000ee30000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f2a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f220000413d000000000504004b00000f390000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b303000041000000000032043500000024024000390000001503000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f600000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f580000413d000000000504004b00000f6f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b5020000410000000000210435000000240140003900000013020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f970000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f8f0000413d000000000504004b00000fa60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000fde0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000fd70000413d000000000504004b00000fec0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000ffb0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ff30000413d000000000503004b0000100a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010190000413d000000000503004b000010300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010470000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000103f0000413d000000000503004b000010560000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000106d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010650000413d000000000503004b0000107c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010930000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000108b0000413d000000000503004b000010a20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300008000000000002000300000005001d000700000001001d000000000101004b000013a50000613d000400000003001d000200000004001d000000400400043d000100000002001d00000570022001970000ffff0120008c000013b70000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000010de0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010d60000413d000000000705004b000010ed0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000013cb0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c000013930000213d0000000101100190000013930000c13d000000400040043f0000001f0130008c000013910000a13d00000000010a0433000000000101004b000013f10000c13d000005b40100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011260000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000111e0000413d000000000705004b000011350000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014020000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000000401400039000014280000c13d00000574020000410000000000240435000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011690000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000011610000413d000000000705004b000011780000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014380000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000145e0000613d000005870140009c000013930000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000013990000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f00000005030000290000000102200190000013910000613d000000000101043b0000000002030433000000010320008c0000000405000029000013990000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000013990000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b000012270000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014e80000613d00000004020000290000056f0120009c000013930000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000150e0000613d00000005020000290000056f0120009c000013930000213d000000400020043f000000000100041600000580011001970000000000010417000012580000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000015340000613d00000005020000290000056f0120009c000013930000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d0440019700000001033001900000139f0000c13d0000000003000031000000000523004b0000139f0000413d0000000304400367000005810510009c0000146f0000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000102000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d0330019700040000000103550000000102200190000014810000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c000013930000213d0000000102200190000013930000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000012970000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000128f0000413d000000000100004b000012990000613d0000000101000031000000000113004b000013910000213d00000004020003670000001f0130018f0000000503300272000012a90000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000012a10000413d000000000401004b000012b80000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000149c0000613d00000006090000290000056f0190009c0000000501000029000013930000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000000404000029000013910000c13d00000000020404330000056f0320009c000013910000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b000013910000c13d00000000230204340000056f0430009c000013930000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c000013930000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000013910000213d000000000432004b000013370000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b000013910000c13d000000400500043d000005870650009c000013930000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000131c0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000006060000290000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000013630000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000013590000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014c20000613d00000006020000290000056f0120009c0000000001020019000013930000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f0000000101200190000013910000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000013d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d00000413d000000000504004b000013e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b3020000410000000000210435000000240140003900000015020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f00000005033002720000140f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000014070000413d000000000504004b0000141e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b503000041000000000032043500000024024000390000001303000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000014450000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000143d0000413d000000000504004b000014540000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f00000005023002720000148c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014850000413d000000000504004b0000149a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f0000000504400272000014a90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014a10000413d000000000503004b000014b80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014cf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014c70000413d000000000503004b000014de0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014f50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014ed0000413d000000000503004b000015040000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000151b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015130000413d000000000503004b0000152a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000015410000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015390000413d000000000503004b000015500000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000155d002104210000000102000039000000000001042d0000000002000019000000000001042d00001562002104230000000102000039000000000001042d0000000002000019000000000001042d00001567002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000156d002104290000000102000039000000000001042d0000000002000019000000000001042d0000156f00000432000015700001042e00001571000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000ec8067c600000000000000000000000000000000000000000000000000000000ec8067c700000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb6000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000e9f18c17000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000579952fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0c2e4ff97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbfad7e232e000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e554686520636f64652068617368206973206e6f74206b6e6f776e0000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4000000800000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb00000000000000000000000000000000000001040000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f4de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c20000000000000000000000000000000000000008400000080000000000000000000000001000000000000000000000000000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f63bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f0000000000000000000000000000000000000000000000000000000000000000000000000034a847ba485cad38c9fa78abfe24fa6106d1853962dad77d41720e1a6e146113", - "deployedBytecode": "0x00050000000000020009000000000002000000000301001900000060033002700000055d04300197000400000041035500030000000103550000055d0030019d000200000002001f000100000000001f0000008001000039000000400010043f0000000101200190000000630000c13d0000000002000031000000040120008c0000040f0000413d0000000301000367000000000301043b000000e0033002700000055f0430009c0000006b0000213d000005670430009c000000ab0000213d0000056b0430009c000001620000613d0000056c0430009c000002ca0000613d0000056d0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000003b0000c13d000005910120009c000002b50000813d000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d00000000003104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d020000390000000203000039000005a8040000410000000805000029156f155a0000040f00000001012001900000040f0000613d000000a90000013d0000000001000416000000000101004b0000040f0000c13d0000002001000039000001000010044300000120000004430000055e01000041000015700001042e000005600430009c0000000004000410000900000004001d000000e30000213d000005640430009c000001840000613d000005650430009c000003540000613d000005660330009c0000040f0000c13d000000040320008a0000056e04000041000000200530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000e04043b0000056f04e0009c0000040f0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000040f0000213d000000090500008a0000000004000411000000000554016f000080070550008c000004e80000c13d00000000050e004b0000051c0000c13d0000000001000416000000000101004b000006b70000c13d0000000001000019000015700001042e000005680430009c000002080000613d000005690130009c000003e30000613d0000056a0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d0000000002000031000000040120008a0000056e03000041000000800410008c000000000400001900000000040340190000056e01100197000000000501004b000000000300a0190000056e0110009c00000000010400190000000001036019000000000101004b0000040f0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005700330009c0000040f0000213d0000006401100370000000000101043b0000056f0310009c0000040f0000213d0000000401100039156f0ae20000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019156f0afd0000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000005610430009c000002980000613d000005620430009c000004020000613d000005630330009c0000040f0000c13d000000040320008a0000056e04000041000000400530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b000800000003001d0000056f0330009c0000040f0000213d00000008030000290000000002320049000700000002001d000000040220008a0000056e03000041000000a00420008c000000000400001900000000040340190000056e02200197000000000502004b000000000300a0190000056e0220009c00000000020400190000000002036019000000000202004b0000040f0000c13d0000002402100370000000000202043b000600000002001d000005700220009c0000040f0000213d00000000020004110000000903000029000000000232004b000004de0000c13d00000008020000290000000402200039000000000121034f000000000201043b0000057401000041000000800010043f000500000002001d000000840020043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800402000039156f155f0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001360000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000012e0000413d000000000705004b000001450000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004f60000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200230008c0000040f0000413d000000800200043d000000000202004b0000071b0000c13d00000571020000410000000404000029000000000024043500000084021001bf00000020030000390000000000320435000000c40210003900000590030000410000000000320435000000a4011000390000001a02000039000000000021043500000040014002100000057b011001c700001571000104300000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000400310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000003020003670000000401200370000000000101043b000005700310009c0000040f0000213d0000002402200370000000000202043b156f0bd80000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000800000001001d0000056f0110009c0000040f0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000001bb0000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000600000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001dc0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001d40000413d000000000705004b000001eb0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000061f0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000601000029156f0bd80000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029156f0c040000040f00000006010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000700000004001d0000056f0440009c0000040f0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000002470000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000400000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000002680000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002600000413d000000000705004b000002770000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cf0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029156f10ac0000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000044e0000c13d0000ffff0120008c0000044e0000a13d000000400100043d0000006402100039000005a90300004100000000003204350000004402100039000005aa030000410000000000320435000000240210003900000024030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000700000001001d0000056f0110009c0000040f0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000003040000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003250000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000031d0000413d000000000705004b000003340000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006450000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029156f0c040000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005700110009c0000040f0000213d00000009010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007450000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007450000213d00000000001304350000000001020433000000010210008c000007450000213d0000000102000039000000400400043d000000000101004b000003dc0000c13d000005a50100004100000000001404350000000401400039000000090200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000900000004001d156f155f0000040f000000090a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b40000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ac0000413d000000000705004b000003c40000613d0000000506600210000000000761034f000000090800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007630000613d0000001f01400039000000600210018f00000009010000290000000001120019000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000200230008c0000040f0000413d00000009020000290000000002020433000000000202004b00000000020000190000000102006039000000000401001900000000002404350000055d010000410000055d0240009c0000000001044019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000005700210009c0000040f0000213d000000400200043d000005a60320009c000004ae0000413d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b000004110000613d000000000100001900001571000104300000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000800000004001d0000056f0440009c0000040f0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000004400000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b0000066b0000c13d0000057101000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005aa01000041000000c40010043f000005a901000041000000e40010043f000005ab010000410000157100010430000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400400043d000005870240009c000003fc0000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007450000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007450000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c0000074b0000c13d000000000101004b0000074b0000c13d00000001020000390000000701000029000900000002001d0000000000210435000000080100002900000570011001970000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007450000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d000000090200002900000000002104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d02000039000000020300003900000599040000410000000805000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007450000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007450000213d00000000003104350000000003020433000000010230008c000007450000213d000000400200043d00000000033204360000000001010433000000010410008c000007450000213d00000000001304350000055d010000410000055d0320009c00000000010240190000004001100210000005a7011001c7000015700001042e0000057101000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000057201000041000000c40010043f000005730100004100001571000104300000057101000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f0000059a01000041000000c40010043f0000059b01000041000000e40010043f0000059c01000041000001040010043f0000059d010000410000157100010430000000400200043d0000001f0430018f0000000503300272000005030000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004fb0000413d000000000504004b000005120000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b0000056e09000041000000000a58004b000000000a000019000000000a0980190000056e0b5001970000056e0c800197000000000dbc004b0000000009008019000000000bbc013f0000056e0bb0009c00000000090ac019000000000909004b0000040f0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000008810000c13d00000001077000390000000008e7004b000005210000413d0000000001000416000000000161004b000006b70000c13d000000c30100008a0000000001310049000200000001001d0000057001400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b000000020300002900000000033000310000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000002f20019000700000002001d0000006002200039000600000002001d000000000121034f000000000101043b000300000001001d00000578010000410000000000100439000000090100002900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000800000009001d156f155f0000040f000000070b0000290000000809000029000000040f000029000000050e00002900000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400a00043d0000059e0100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005700210009c0000040f0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000008402a00039000000000012043500000006010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b0000056e05000041000000000643004b000000000600001900000000060580190000056e044001970000056e07300197000000000847004b0000000005008019000000000447013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000003b30019000000000131034f000000000101043b0000056f0410009c0000040f0000213d000000200330003900000000021200490000056e04000041000000000523004b000000000500001900000000050420190000056e022001970000056e06300197000000000726004b0000000004008019000000000226013f0000056e0220009c00000000020500190000000002046019000000000202004b0000040f0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000005d70000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000005cf0000413d0000001f05100190000005e60000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000903000029000000040330008c000006180000613d0000001f01100039000000200300008a000000000131016f0000059f030000410000059f0410009c00000000010380190000055d030000410000055d04a0009c00070000000a001d000000000403001900000000040a401900000040044002100000006001100210000000000141019f0000055d0420009c0000000002038019000000c002200210000000000121019f000005a0011000410000000303000029000000000203004b0000060b0000613d0000058e011001c7000080090200003900000009040000290000000005000019156f155a0000040f0000060d0000013d0000000902000029156f155a0000040f0004000000010355000000000301001900000060033002700001055d0030019d0000055d043001970000000102200190000000050e000029000000040f0000290000000809000029000000070a000029000008140000613d0000056f01a0009c000003fc0000213d0000004000a0043f00000001099000390000000001e9004b000005490000413d000000a90000013d000000400200043d0000001f0430018f00000005033002720000062c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006240000413d000000000504004b0000063b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000006520000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000064a0000413d000000000504004b000006610000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000068a0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000006820000413d000000000705004b000006990000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006f50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000501000029156f0bd80000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029156f10ac0000040f00000005010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000400100043d0000008402100039000005a20300004100000000003204350000006402100039000005a30300004100000000003204350000004402100039000005a4030000410000000000320435000000240210003900000045030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000006dc0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d40000413d000000000504004b000006eb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000007020000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006fa0000413d000000000504004b000007110000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000c002100039000000400020043f00000004020000290000000000020435000000a001100039000200000001001d000000000001043500000008010000290000002401100039000100000001001d0000000301100367000000000101043b000300000001001d000005700110009c0000040f0000213d00000003010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000004020000290000000002020433000000010320008c000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000002020000290000000002020433000000010320008c000007890000a13d000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000000400100043d000000840210003900000594030000410000000000320435000000640210003900000595030000410000000000320435000000440210003900000596030000410000000000320435000000240210003900000043030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000007700000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007680000413d000000000504004b0000077f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000080100002900000084021000390000000301000367000000000221034f000000000202043b0000000703000029000000230330008a0000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d000000080300002900000000023200190000000403200039000000000331034f000000000303043b000700000003001d0000056f0330009c0000040f0000213d0000000703000029000000000330007900000024052000390000056e02000041000000000435004b000000000400001900000000040220190000056e03300197000400000005001d0000056e05500197000000000635004b0000000002008019000000000335013f0000056e0330009c000000000204c019000000000202004b0000040f0000c13d00000008020000290000004402200039000000000121034f000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000000002000416000800000002001d000000000101004b0000083a0000c13d0000000801000029000000000101004b000008870000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000002401400039000000050200002900000000002104350000058d0100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008fa0000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f00000001010000290000000301100367000000000701043b000005700170009c0000040f0000213d0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f0400004100000006050000290000000506000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d000000400200043d0000001f0340018f0000000504400272000008210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008190000413d000000000503004b000008300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000801000029000000000101004b0000089c0000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057c01000041000000000014043500000004014000390000000302000029000000000021043500000005010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039000200000002001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008d40000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000000801000029000000000101004b000008780000613d000000000100041600000580011001970000000000010417000000000100041400000007020000290000000403000029000000000232001a0000055d04300197000008810000413d0000000003000031000000000523004b000009460000813d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d00000064021000390000058a03000041000000000032043500000044021000390000058b030000410000000000320435000000240210003900000038030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000005780100004100000000001004390000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000302000029000000000021043500000009010000290000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000009200000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000083d0000013d000000400200043d0000001f0340018f0000000504400272000008e10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008d90000413d000000000503004b000008f00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000009070000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008ff0000413d000000000503004b000009160000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000092d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000009250000413d000000000503004b0000093c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000304400367000005810510009c0000095b0000413d000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c7000015710001043000000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af0000000302000029000000060d000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000a7b0000613d0000003f013000390000058401100197000000400200043d0000000001120019000700000002001d000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000070100002900000000073104360000001f013000390000000501100272000009890000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000009810000413d000900000007001d000000000100004b0000098c0000613d0000000101000031000000000113004b0000040f0000213d00000004020003670000001f0130018f00000005033002720000099d0000613d0000000004000019000000050540021000000009060000290000000006560019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000009940000413d000000000401004b000009ad0000613d0000000503300210000000000232034f000000090400002900000000033400190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000020200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d000005850100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000a960000613d00000008010000290000056f0110009c000003fc0000213d0000000801000029000000400010043f000000070100002900000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000040f0000c13d000000090200002900000000020204330000056f0320009c0000040f0000213d0000000903000029000000000131001900000000023200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d00000000230204340000056f0430009c000003fc0000213d00000005043002100000003f04400039000000200500008a000000000454016f000000080500002900000000045400190000056f0540009c000003fc0000213d000000400040043f0000000804000029000000000034043500000006033002100000000003230019000000000413004b0000040f0000213d000000000432004b00000a2f0000813d000000080400002900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b0000040f0000c13d000000400500043d000005870650009c000003fc0000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000a140000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400300043d000000240130003900000040020000390000000000210435000005880100004100000000001304350000000401300039000000030200002900000000002104350000000801000029000000000101043300000044023000390000000000120435000900000003001d0000006402300039000000000301004b00000a5e0000613d000000000300001900000008040000290000002004400039000800000004001d0000000004040433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000a520000413d000000090400002900000000014200490000055d020000410000055d0340009c0000000003020019000000000304401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000abc0000613d00000009010000290000056f0110009c000003fc0000213d000007fe0000013d0000001f0430018f000000050230027200000a860000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a7f0000413d000000000504004b00000a940000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000aa30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000a9b0000413d000000000503004b00000ab20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f000000050440027200000ac90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ac10000413d000000000503004b00000ad80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000001f031000390000056e04000041000000000523004b000000000500001900000000050440190000056e062001970000056e03300197000000000763004b000000000400a019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000afb0000613d0000000303100367000000000303043b0000056f0430009c00000afb0000213d00000020011000390000000004310019000000000224004b00000afb0000213d0000000002030019000000000001042d00000000010000190000157100010430000300000000000200000000070004140000000008450019000000000558004b000000000500001900000001050040390000055d04400197000000010550019000000b8b0000c13d0000000006000031000000000586004b00000b8b0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005810570009c00000b990000813d00000000028600490000055d0220019700000000022403df000000c0017002100000058201100197000005ac011001c700000000011203af0000801002000039156f15640000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000bab0000613d0000003f013000390000058402100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000056f0520009c00000b910000213d000000010440019000000b910000c13d000000400020043f00000000023104360000001f04300039000000050440027200000b3a0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000b320000413d000000000400004b00000b3c0000613d0000000104000031000000000443004b00000b970000213d00000004050003670000001f0430018f000000050330027200000b4c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000b440000413d000000000604004b00000b5b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c0000000304000029000000020500002900000bc60000c13d0000000002020433000000400100043d000000a0031000390000000000230435000000800210003900000000005204350000006002100039000000010300002900000000003204350000057002400197000000400310003900000000002304350000002002100039000005ae030000410000000000320435000000a0030000390000000000310435000005af0310009c00000b910000213d000000c003100039000000400030043f0000055d030000410000055d0420009c0000000002038019000000400220021000000000010104330000055d0410009c00000000010380190000006001100210000000000121019f00000000020004140000055d0420009c0000000002038019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000b970000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000004101000039000000040010043f0000058601000041000015710001043000000000010000190000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000bb60000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000baf0000413d000000000504004b00000bc40000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400100043d0000004402100039000005ad03000041000000000032043500000024021000390000001f030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c70000157100010430000000400300043d0000006004300039000000000024043500000570011001970000004002300039000000000012043500000060010000390000000001130436000005b0020000410000000000210435000005b10230009c00000bfc0000813d0000008002300039000000400020043f0000055d020000410000055d0410009c0000000001028019000000400110021000000000030304330000055d0430009c00000000030280190000006003300210000000000113019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000c020000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000000100001900001571000104300008000000000002000700000001001d000000000101004b00000ef70000613d000300000004001d000400000003001d000000400400043d000200000002001d00000570022001970000ffff0120008c00000f090000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c350000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c2d0000413d000000000705004b00000c440000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f1d0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c00000ee50000213d000000010110019000000ee50000c13d000000400040043f0000001f0130008c00000ee30000a13d00000000010a0433000000000101004b000000040140003900000f430000c13d000005b4020000410000000000240435000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c7d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c750000413d000000000705004b00000c8c0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f530000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000f790000c13d000005740100004100000000001404350000000401400039000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000cc00000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000cb80000413d000000000705004b00000ccf0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f8a0000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000fb00000613d000005870140009c00000ee50000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f0000000503000029000000010220019000000ee30000613d000000000101043b0000000002030433000000020320008c00000eeb0000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000eeb0000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b00000d790000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000103a0000613d00000001020000290000056f0120009c00000ee50000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010600000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f00000000010004160000058001100197000000000001041700000daa0000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010860000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d04400197000000010330019000000ef10000c13d0000000003000031000000000523004b00000ef10000413d0000000304400367000005810510009c00000fc10000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000202000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000fd30000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c00000ee50000213d000000010220019000000ee50000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000de90000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000de10000413d000000000100004b00000deb0000613d0000000101000031000000000113004b00000ee30000213d00000004020003670000001f0130018f000000050330027200000dfb0000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000df30000413d000000000401004b00000e0a0000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000fee0000613d00000006090000290000056f0190009c000000050100002900000ee50000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b000000040400002900000ee30000c13d00000000020404330000056f0320009c00000ee30000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000ee30000c13d00000000230204340000056f0430009c00000ee50000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c00000ee50000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000ee30000213d000000000432004b00000e890000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b00000ee30000c13d000000400500043d000005870650009c00000ee50000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000e6e0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f0000000606000029000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000eb50000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000eab0000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010140000613d00000006020000290000056f0120009c000000000102001900000ee50000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f000000010120019000000ee30000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f2a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f220000413d000000000504004b00000f390000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b303000041000000000032043500000024024000390000001503000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f600000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f580000413d000000000504004b00000f6f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b5020000410000000000210435000000240140003900000013020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f970000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f8f0000413d000000000504004b00000fa60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000fde0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000fd70000413d000000000504004b00000fec0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000ffb0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ff30000413d000000000503004b0000100a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010190000413d000000000503004b000010300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010470000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000103f0000413d000000000503004b000010560000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000106d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010650000413d000000000503004b0000107c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010930000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000108b0000413d000000000503004b000010a20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300008000000000002000300000005001d000700000001001d000000000101004b000013a50000613d000400000003001d000200000004001d000000400400043d000100000002001d00000570022001970000ffff0120008c000013b70000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000010de0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010d60000413d000000000705004b000010ed0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000013cb0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c000013930000213d0000000101100190000013930000c13d000000400040043f0000001f0130008c000013910000a13d00000000010a0433000000000101004b000013f10000c13d000005b40100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011260000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000111e0000413d000000000705004b000011350000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014020000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000000401400039000014280000c13d00000574020000410000000000240435000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011690000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000011610000413d000000000705004b000011780000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014380000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000145e0000613d000005870140009c000013930000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000013990000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f00000005030000290000000102200190000013910000613d000000000101043b0000000002030433000000010320008c0000000405000029000013990000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000013990000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b000012270000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014e80000613d00000004020000290000056f0120009c000013930000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000150e0000613d00000005020000290000056f0120009c000013930000213d000000400020043f000000000100041600000580011001970000000000010417000012580000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000015340000613d00000005020000290000056f0120009c000013930000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d0440019700000001033001900000139f0000c13d0000000003000031000000000523004b0000139f0000413d0000000304400367000005810510009c0000146f0000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000102000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d0330019700040000000103550000000102200190000014810000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c000013930000213d0000000102200190000013930000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000012970000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000128f0000413d000000000100004b000012990000613d0000000101000031000000000113004b000013910000213d00000004020003670000001f0130018f0000000503300272000012a90000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000012a10000413d000000000401004b000012b80000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000149c0000613d00000006090000290000056f0190009c0000000501000029000013930000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000000404000029000013910000c13d00000000020404330000056f0320009c000013910000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b000013910000c13d00000000230204340000056f0430009c000013930000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c000013930000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000013910000213d000000000432004b000013370000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b000013910000c13d000000400500043d000005870650009c000013930000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000131c0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000006060000290000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000013630000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000013590000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014c20000613d00000006020000290000056f0120009c0000000001020019000013930000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f0000000101200190000013910000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000013d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d00000413d000000000504004b000013e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b3020000410000000000210435000000240140003900000015020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f00000005033002720000140f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000014070000413d000000000504004b0000141e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b503000041000000000032043500000024024000390000001303000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000014450000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000143d0000413d000000000504004b000014540000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f00000005023002720000148c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014850000413d000000000504004b0000149a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f0000000504400272000014a90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014a10000413d000000000503004b000014b80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014cf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014c70000413d000000000503004b000014de0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014f50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014ed0000413d000000000503004b000015040000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000151b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015130000413d000000000503004b0000152a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000015410000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015390000413d000000000503004b000015500000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000155d002104210000000102000039000000000001042d0000000002000019000000000001042d00001562002104230000000102000039000000000001042d0000000002000019000000000001042d00001567002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000156d002104290000000102000039000000000001042d0000000002000019000000000001042d0000156f00000432000015700001042e00001571000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000ec8067c600000000000000000000000000000000000000000000000000000000ec8067c700000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb6000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000e9f18c17000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000579952fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0c2e4ff97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbfad7e232e000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e554686520636f64652068617368206973206e6f74206b6e6f776e0000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4000000800000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb00000000000000000000000000000000000001040000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f4de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c20000000000000000000000000000000000000008400000080000000000000000000000001000000000000000000000000000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f63bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f0000000000000000000000000000000000000000000000000000000000000000000000000034a847ba485cad38c9fa78abfe24fa6106d1853962dad77d41720e1a6e146113", + "bytecode": "0x0005000000000002000900000000000200000000030100190000006003300270000005a80430019700040000004103550003000000010355000005a80030019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000009b0000c13d0000000002000031000000040120008c0000048b0000413d0000000301000367000000000301043b000000e003300270000005aa0430009c000000a30000a13d000005ab0430009c000000dd0000a13d000005ac0430009c000001750000213d000005af0430009c000001f20000613d000005b00130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d0000000002000411000000020100003900000002011001880000003b0000c13d0000ffff0120008c000000c80000213d000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400400043d000005ca0240009c000004c00000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007e80000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007e80000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c000007ee0000c13d000000000101004b000007ee0000c13d00000001020000390000000701000029000900000002001d00000000002104350000000801000029000005bd011001970000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007e80000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d00000009020000290000000000210435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005d0040000410000000805000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d0000000001000416000000000101004b0000048b0000c13d000000200100003900000100001004430000012000000443000005a9010000410000169b0001042e000005b40430009c0000013d0000213d000005b80430009c000003350000613d000005b90430009c000003570000613d000005ba0130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d000000000200041100000002010000390000000201100188000004c60000c13d000005c70120009c000004c60000413d000000400100043d0000006402100039000005ec0300004100000000003204350000004402100039000005ed030000410000000000320435000000240210003900000024030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000005b10430009c000002270000613d000005b20430009c000003e10000613d000005b30330009c0000048b0000c13d000000040220008a000005bb03000041000000200420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000000401100370000000000201043b0000000001000411000080070110008c0000048d0000c13d000005c101000041000000800010043f000900000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001130000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004970000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200330008c0000048b0000413d000000800300043d000000000303004b0000052d0000c13d000005be03000041000000000031043500000084032001bf00000020040000390000000000430435000000c403200039000005c5040000410000000000430435000000a4022000390000001a0300003900000000003204350000004001100210000005c6011001c70000169c00010430000005b50430009c000004280000613d000005b60130009c000004750000613d000005b70130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d0000000002000031000000040120008a000005bb03000041000000800410008c00000000040000190000000004034019000005bb01100197000000000501004b000000000300a019000005bb0110009c00000000010400190000000001036019000000000101004b0000048b0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005bd0330009c0000048b0000213d0000006401100370000000000101043b000005bc0310009c0000048b0000213d0000000401100039169a09060000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019169a09210000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000005ad0430009c000002ab0000613d000005ae0330009c0000048b0000c13d000000040320008a000005bb04000041000000400530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000900000003001d000005bc0330009c0000048b0000213d00000009030000290000000002320049000800000002001d000000040220008a000005bb03000041000000a00420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000002402100370000000000202043b000700000002001d000005bd0220009c0000048b0000213d00000000020004100000000003000411000000000223004b000005720000c13d00000009020000290000000402200039000000000121034f000000000201043b000005c101000041000000800010043f000600000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001c60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001be0000413d000000000705004b000001d50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000067f0000613d0000001f01400039000000600110018f00000080021001bf000500000002001d000000400020043f000000200230008c0000048b0000413d000000800200043d000000000202004b000007bf0000c13d000005be020000410000000504000029000000000024043500000084021001bf00000020030000390000000000320435000000c402100039000005c5030000410000000000320435000000a4011000390000001a0200003900000000002104350000004001400210000005c6011001c70000169c00010430000000040320008a000005bb04000041000000200530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000e04043b000005bc04e0009c0000048b0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000048b0000213d000000090500008a0000000004000411000000000554016f000080070550008c0000051f0000c13d00000000050e004b0000057c0000c13d0000000001000416000000000101004b000004ed0000613d000007550000013d000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000048b0000213d0000000201000039000000020110018800000001011002700000025e0000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000600000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000027f0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002770000413d000000000705004b0000028e0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006a50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000601000029169a09fc0000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029169a0a320000040f0000000601000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000800000004001d000005bc0440009c0000048b0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000002e70000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003080000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003000000413d000000000705004b000003170000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000076d0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000501000029169a09fc0000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029169a0eda0000040f0000000501000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000400310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000003020003670000000401200370000000000101043b000005bd0310009c0000048b0000213d0000002402200370000000000202043b169a09fc0000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000700000001001d000005bc0110009c0000048b0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000048b0000213d000000020100003900000002011001880000000101100270000003910000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b20000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003aa0000413d000000000705004b000003c10000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cb0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029169a0a320000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005bd0110009c0000048b0000213d00000009010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007e80000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007e80000213d00000000001304350000000002020433000000010120008c000007e80000213d0000000101000039000000000202004b000004200000c13d0000000901000029000005e70110019800000000010000190000082c0000c13d000000010110018f000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000700000004001d000005bc0440009c0000048b0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000004670000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000006f10000c13d000005be01000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005ed01000041000000c40010043f000005ec01000041000000e40010043f000005ee010000410000169c000104300000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000005bd0210009c000004bd0000a13d00000000010000190000169c00010430000005be01000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000005e001000041000000c40010043f000005c0010000410000169c00010430000000400200043d0000001f0430018f0000000503300272000004a40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000049c0000413d000000000504004b000004b30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d000005e90320009c000004ef0000413d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d0000000000310435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005eb040000410000000805000029169a16850000040f00000001012001900000048b0000613d00000000010000190000169b0001042e0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007e80000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007e80000213d00000000003104350000000003020433000000010230008c000007e80000213d000000400200043d00000000033204360000000001010433000000010410008c000007e80000213d0000000000130435000005a801000041000005a80320009c00000000010240190000004001100210000005ea011001c70000169b0001042e000005be01000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f000005d101000041000000c40010043f000005d201000041000000e40010043f000005d301000041000001040010043f000005d4010000410000169c000104300000000001000416000000000101004b000007400000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400400043d000000240140003900000009020000290000000000210435000005e4010000410000000000140435000000040140003900008010020000390000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000008060000613d0000000801000029000005bc0110009c000004c00000213d0000000801000029000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000080070500003900008010070000390000000906000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d000005be01000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f000005bf01000041000000c40010043f000005c0010000410000169c0001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b000005bb09000041000000000a58004b000000000a000019000000000a098019000005bb0b500197000005bb0c800197000000000dbc004b0000000009008019000000000bbc013f000005bb0bb0009c00000000090ac019000000000909004b0000048b0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000007b90000c13d00000001077000390000000008e7004b000005810000413d0000000001000416000000000161004b000007550000c13d000000c30100008a0000000001310049000200000001001d000005bd01400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b00000002030000290000000003300031000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000002f20019000800000002001d0000006002200039000700000002001d000000000121034f000000000101043b000300000001001d000005d50100004100000000001004390000000001000410000600000001001d0000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000900000009001d169a168a0000040f000000080b0000290000000909000029000000040f000029000000050e00002900000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400a00043d000005d70100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005bd0210009c0000048b0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000048b0000c13d0000008402a00039000000000012043500000007010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b000005bb05000041000000000643004b00000000060000190000000006058019000005bb04400197000005bb07300197000000000847004b0000000005008019000000000447013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000003b30019000000000131034f000000000101043b000005bc0410009c0000048b0000213d00000020033000390000000002120049000005bb04000041000000000523004b00000000050000190000000005042019000005bb02200197000005bb06300197000000000726004b0000000004008019000000000226013f000005bb0220009c00000000020500190000000002046019000000000202004b0000048b0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000006380000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000006300000413d0000001f05100190000006470000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000604000029000000040340008c000006780000613d0000001f01100039000000200300008a000000000131016f000005d803000041000005d80510009c0000000001038019000005a803000041000005a805a0009c00080000000a001d000000000503001900000000050a401900000040055002100000006001100210000000000151019f000005a80520009c0000000002038019000000c002200210000000000121019f000005d9011000410000000303000029000000000203004b0000066b0000613d000005da011001c700008009020000390000000005000019169a16850000040f0000066d0000013d0000000002040019169a16850000040f000400000001035500000000030100190000006003300270000105a80030019d000005a8043001970000000102200190000000050e000029000000040f0000290000000909000029000000080a000029000008e00000613d000005bc01a0009c000004c00000213d0000004000a0043f00000001099000390000000001e9004b000005a90000413d000004ed0000013d000000400200043d0000001f0430018f00000005033002720000068c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006840000413d000000000504004b0000069b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006b20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006aa0000413d000000000504004b000006c10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d00000413d000000000504004b000006e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005c801000041000000800010043f0000000001000411000400000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000007100000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000007080000413d000000000705004b0000071f0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007930000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029169a0eda0000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400100043d0000008402100039000005dd0300004100000000003204350000006402100039000005de0300004100000000003204350000004402100039000005df030000410000000000320435000000240210003900000045030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000077a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007720000413d000000000504004b000007890000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000007a00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007980000413d000000000504004b000007af0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000c002100039000000400020043f00000005020000290000000000020435000000a001100039000300000001001d0000000000010435000000090100002900000024011000390000000301100367000000000101043b000400000001001d000005bd0110009c0000048b0000213d00000004010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000005020000290000000002020433000000010320008c000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000003020000290000000002020433000000010320008c0000089e0000a13d000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000000400100043d0000008402100039000005cb0300004100000000003204350000006402100039000005cc0300004100000000003204350000004402100039000005cd030000410000000000320435000000240210003900000043030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0340018f0000000504400272000008130000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000080b0000413d000000000503004b000008220000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400400043d000800000004001d000005e8010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a168a0000040f000000080a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008520000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000084a0000413d00000000090a0019000000000705004b000008620000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000008780000613d0000001f01400039000000600210018f0000000001920019000000000221004b00000000020000190000000102004039000005bc0410009c000004c00000213d0000000102200190000004c00000c13d000000400010043f000000200130008c0000048b0000413d0000000001090433000000000101004b000000000100001900000001010060390000041f0000013d000000400200043d0000001f0430018f0000000503300272000008850000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087d0000413d000000000504004b000008940000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000090100002900000084021000390000000301000367000000000221034f000000000202043b0000000803000029000000230330008a000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d000000090300002900000000023200190000000403200039000000000131034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d000000080100002900000000011000790000002404200039000005bb02000041000000000314004b00000000030000190000000003022019000005bb01100197000500000004001d000005bb04400197000000000514004b0000000002008019000000000114013f000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000009010000290000004401100039169a0a280000040f000000000601001900000007010000290000000402000029000000060300002900000005040000290000000805000029169a13880000040f00000000010000190000169b0001042e000000400200043d0000001f0340018f0000000504400272000008ed0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008e50000413d000000000503004b000008fc0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000001f03100039000005bb04000041000000000523004b00000000050000190000000005044019000005bb06200197000005bb03300197000000000763004b000000000400a019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b0000091f0000613d0000000303100367000000000303043b000005bc0430009c0000091f0000213d00000020011000390000000004310019000000000224004b0000091f0000213d0000000002030019000000000001042d00000000010000190000169c00010430000300000000000200000000070004140000000008450019000000000558004b00000000050000190000000105004039000005a8044001970000000105500190000009af0000c13d0000000006000031000000000586004b000009af0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005ef0570009c000009bd0000813d0000000002860049000005a80220019700000000022403df000000c001700210000005f001100197000005f1011001c700000000011203af0000801002000039169a168f0000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000009cf0000613d0000003f01300039000005f202100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000005bc0520009c000009b50000213d0000000104400190000009b50000c13d000000400020043f00000000023104360000001f0430003900000005044002720000095e0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000009560000413d000000000400004b000009600000613d0000000104000031000000000443004b000009bb0000213d00000004050003670000001f0430018f0000000503300272000009700000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000009680000413d000000000604004b0000097f0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000003040000290000000205000029000009ea0000c13d0000000002020433000000400100043d000000a003100039000000000023043500000080021000390000000000520435000000600210003900000001030000290000000000320435000005bd02400197000000400310003900000000002304350000002002100039000005f4030000410000000000320435000000a0030000390000000000310435000005f50310009c000009b50000213d000000c003100039000000400030043f000005a803000041000005a80420009c000000000203801900000040022002100000000001010433000005a80410009c00000000010380190000006001100210000000000121019f0000000002000414000005a80420009c0000000002038019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f0000000102200190000009bb0000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000009da0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000009d30000413d000000000504004b000009e80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400100043d0000004402100039000005f303000041000000000032043500000024021000390000001f030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000400300043d00000060043000390000000000240435000005bd011001970000004002300039000000000012043500000060010000390000000001130436000005f7020000410000000000210435000005f80230009c00000a200000813d0000008002300039000000400020043f000005a802000041000005a80410009c000000000102801900000040011002100000000003030433000005a80430009c00000000030280190000006003300210000000000113019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f000000010220019000000a260000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c000104300000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b00000a300000c13d000000000001042d00000000010000190000169c000104300008000000000002000700000001001d000000000101004b00000d250000613d000300000004001d000400000003001d000000400400043d000200000002001d000005bd022001970000ffff0120008c00000d370000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000a630000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000a5b0000413d000000000705004b00000a720000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d4b0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c00000d130000213d000000010110019000000d130000c13d000000400040043f0000001f0130008c00000d110000a13d00000000010a0433000000000101004b000000040140003900000d710000c13d000005fb02000041000000000024043500000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aab0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000aa30000413d000000000705004b00000aba0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d810000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000da70000c13d000005c1010000410000000000140435000000040140003900000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aee0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000ae60000413d000000000705004b00000afd0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000db80000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000dde0000613d000005ca0140009c00000d130000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f0000000503000029000000010220019000000d110000613d000000000101043b0000000002030433000000020320008c00000d190000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000d190000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b00000ba70000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e680000613d0000000102000029000005bc0120009c00000d130000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e8e0000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f00000000010004160000060101100197000000000001041700000bd80000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000eb40000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a804400197000000010330019000000d1f0000c13d0000000003000031000000000523004b00000d1f0000413d0000000304400367000005ef0510009c00000def0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000202000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a8033001970004000000010355000000010220019000000e010000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c00000d130000213d000000010220019000000d130000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000c170000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000c0f0000413d000000000100004b00000c190000613d0000000101000031000000000113004b00000d110000213d00000004020003670000001f0130018f000000050330027200000c290000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000c210000413d000000000401004b00000c380000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e1c0000613d0000000609000029000005bc0190009c000000050100002900000d130000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b000000040400002900000d110000c13d0000000002040433000005bc0320009c00000d110000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b00000d110000c13d0000000023020434000005bc0430009c00000d130000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c00000d130000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000d110000213d000000000432004b00000cb70000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b00000d110000c13d000000400500043d000005ca0650009c00000d130000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000c9c0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000606000029000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000ce30000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000cd90000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e420000613d0000000602000029000005bc0120009c000000000102001900000d130000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f000000010120019000000d110000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d580000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d500000413d000000000504004b00000d670000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fa030000410000000000320435000000240240003900000015030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d8e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d860000413d000000000504004b00000d9d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fc020000410000000000210435000000240140003900000013020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000dc50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000dbd0000413d000000000504004b00000dd40000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f000000050230027200000e0c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000e050000413d000000000504004b00000e1a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f000000050440027200000e290000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e210000413d000000000503004b00000e380000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e4f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e470000413d000000000503004b00000e5e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e750000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e6d0000413d000000000503004b00000e840000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e9b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e930000413d000000000503004b00000eaa0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000ec10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000eb90000413d000000000503004b00000ed00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300008000000000002000300000005001d000700000001001d000000000101004b000011d30000613d000400000003001d000200000004001d000000400400043d000100000002001d000005bd022001970000ffff0120008c000011e50000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f0c0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f040000413d000000000705004b00000f1b0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000011f90000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c000011c10000213d0000000101100190000011c10000c13d000000400040043f0000001f0130008c000011bf0000a13d00000000010a0433000000000101004b0000121f0000c13d000005fb010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f540000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f4c0000413d000000000705004b00000f630000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012300000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000000401400039000012560000c13d000005c102000041000000000024043500000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f970000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f8f0000413d000000000705004b00000fa60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012660000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000128c0000613d000005ca0140009c000011c10000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000011c70000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f00000005030000290000000102200190000011bf0000613d000000000101043b0000000002030433000000010320008c0000000405000029000011c70000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000011c70000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b000010550000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013160000613d0000000402000029000005bc0120009c000011c10000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000133c0000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f000000000100041600000601011001970000000000010417000010860000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013620000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a8044001970000000103300190000011cd0000c13d0000000003000031000000000523004b000011cd0000413d0000000304400367000005ef0510009c0000129d0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000102000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000012af0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000011c10000213d0000000102200190000011c10000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000010c50000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000010bd0000413d000000000100004b000010c70000613d0000000101000031000000000113004b000011bf0000213d00000004020003670000001f0130018f0000000503300272000010d70000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000010cf0000413d000000000401004b000010e60000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012ca0000613d0000000609000029000005bc0190009c0000000501000029000011c10000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000011bf0000c13d0000000002040433000005bc0320009c000011bf0000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000011bf0000c13d0000000023020434000005bc0430009c000011c10000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c000011c10000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000011bf0000213d000000000432004b000011650000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000011bf0000c13d000000400500043d000005ca0650009c000011c10000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000114a0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000011910000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000011870000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012f00000613d0000000602000029000005bc0120009c0000000001020019000011c10000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f0000000101200190000011bf0000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012060000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000011fe0000413d000000000504004b000012150000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fa020000410000000000210435000000240140003900000015020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000123d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012350000413d000000000504004b0000124c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fc030000410000000000320435000000240240003900000013030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012730000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000126b0000413d000000000504004b000012820000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000012ba0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000012b30000413d000000000504004b000012c80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000012d70000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012cf0000413d000000000503004b000012e60000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000012fd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012f50000413d000000000503004b0000130c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013230000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000131b0000413d000000000503004b000013320000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013490000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013410000413d000000000503004b000013580000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000136f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013670000413d000000000503004b0000137e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300009000000000002000500000005001d000700000003001d000800000002001d000600000001001d0000000002000416000000000106004b0000152f0000613d000300000004001d000400000002001d000000000102004b000013cb0000613d000005d50100004100000000001004390000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000000801000029000005bd01100197000000240240003900000000001204350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000016240000613d0000000902000029000005bc0120009c000015790000213d000000400020043f000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d0000000701000029000005ff0110019700000600011001c7000000400400043d00000024024000390000000000120435000005fe0100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039000100000002001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015850000613d0000000202000029000005bc0120009c0000000401000029000015790000213d000000400020043f000000000101004b000014070000613d0000000001000416000006010110019700000000000104170000000001000414000000030400002900000005030000290000000002430019000000000332004b00000000030000190000000103004039000005a80440019700000001033001900000157f0000c13d0000000003000031000000000523004b0000157f0000413d0000000304400367000005ef0510009c000015ab0000813d0000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af0000000602000029000005bd0d200197000000080200002900080000000d001d169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000015bd0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000015790000213d0000000102200190000015790000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000014460000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000143e0000413d000000000100004b000014480000613d0000000101000031000000000113004b000015770000213d00000004020003670000001f0130018f0000000503300272000014580000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000014500000413d000000000401004b000014670000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000001020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d00000603010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015d80000613d0000000609000029000005bc0190009c0000000501000029000015790000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000015770000c13d0000000002040433000005bc0320009c000015770000213d000000000114001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000015770000c13d0000000023020434000005bc0430009c000015790000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004490019000005bc0540009c000015790000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000015770000213d000000000432004b000014e60000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000015770000c13d000000400500043d000005ca0650009c000015790000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b000014cb0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000090200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000015120000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000015080000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000500000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015fe0000613d0000000502000029000005bc0120009c000015660000a13d000015790000013d000000000102004b0000164a0000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000000240140003900000007020000290000000000210435000005e40100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000165f0000613d0000000502000029000005bc0120009c000015790000213d0000000601000029000005bd01100197000800000001001d000000400020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000080500002900000007060000290000000907000029169a16850000040f0000000101200190000015770000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400200043d0000001f0340018f0000000504400272000015920000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000158a0000413d000000000503004b000015a10000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000015c80000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015c10000413d000000000504004b000015d60000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000015e50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015dd0000413d000000000503004b000015f40000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000160b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016030000413d000000000503004b0000161a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000016310000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016290000413d000000000503004b000016400000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0340018f00000005044002720000166c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016640000413d000000000503004b0000167b0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c0001043000001688002104210000000102000039000000000001042d0000000002000019000000000001042d0000168d002104230000000102000039000000000001042d0000000002000019000000000001042d00001692002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d001900001698002104290000000102000039000000000001042d0000000002000019000000000001042d0000169a000004320000169b0001042e0000169c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000e9f18c1600000000000000000000000000000000000000000000000000000000ecf95b8900000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb600000000000000000000000000000000000000000000000000000000e9f18c1700000000000000000000000000000000000000000000000000000000ec8067c7000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000da37f07f000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff54686520636f64652068617368206973206e6f74206b6e6f776e00000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a40000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb000000000000000000000000000000000000010400000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f496e617070726f7072696174652063616c6c65720000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e5000000000000000000000000ffffffffffffffffffffffffffffffffffff00004de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c200000000000000000000000000000000000000084000000800000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe06b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f4f766572666c6f7700000000000000000000000000000000000000000000000063bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000579952fc000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0001000100000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f000000000039187a54c09fddd78293acb1d6fafb891fffc8438366fb93b8fe735877e8b717", + "deployedBytecode": "0x0005000000000002000900000000000200000000030100190000006003300270000005a80430019700040000004103550003000000010355000005a80030019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000009b0000c13d0000000002000031000000040120008c0000048b0000413d0000000301000367000000000301043b000000e003300270000005aa0430009c000000a30000a13d000005ab0430009c000000dd0000a13d000005ac0430009c000001750000213d000005af0430009c000001f20000613d000005b00130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d0000000002000411000000020100003900000002011001880000003b0000c13d0000ffff0120008c000000c80000213d000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400400043d000005ca0240009c000004c00000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007e80000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007e80000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c000007ee0000c13d000000000101004b000007ee0000c13d00000001020000390000000701000029000900000002001d00000000002104350000000801000029000005bd011001970000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007e80000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d00000009020000290000000000210435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005d0040000410000000805000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d0000000001000416000000000101004b0000048b0000c13d000000200100003900000100001004430000012000000443000005a9010000410000169b0001042e000005b40430009c0000013d0000213d000005b80430009c000003350000613d000005b90430009c000003570000613d000005ba0130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d000000000200041100000002010000390000000201100188000004c60000c13d000005c70120009c000004c60000413d000000400100043d0000006402100039000005ec0300004100000000003204350000004402100039000005ed030000410000000000320435000000240210003900000024030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000005b10430009c000002270000613d000005b20430009c000003e10000613d000005b30330009c0000048b0000c13d000000040220008a000005bb03000041000000200420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000000401100370000000000201043b0000000001000411000080070110008c0000048d0000c13d000005c101000041000000800010043f000900000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001130000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004970000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200330008c0000048b0000413d000000800300043d000000000303004b0000052d0000c13d000005be03000041000000000031043500000084032001bf00000020040000390000000000430435000000c403200039000005c5040000410000000000430435000000a4022000390000001a0300003900000000003204350000004001100210000005c6011001c70000169c00010430000005b50430009c000004280000613d000005b60130009c000004750000613d000005b70130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d0000000002000031000000040120008a000005bb03000041000000800410008c00000000040000190000000004034019000005bb01100197000000000501004b000000000300a019000005bb0110009c00000000010400190000000001036019000000000101004b0000048b0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005bd0330009c0000048b0000213d0000006401100370000000000101043b000005bc0310009c0000048b0000213d0000000401100039169a09060000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019169a09210000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000005ad0430009c000002ab0000613d000005ae0330009c0000048b0000c13d000000040320008a000005bb04000041000000400530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000900000003001d000005bc0330009c0000048b0000213d00000009030000290000000002320049000800000002001d000000040220008a000005bb03000041000000a00420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000002402100370000000000202043b000700000002001d000005bd0220009c0000048b0000213d00000000020004100000000003000411000000000223004b000005720000c13d00000009020000290000000402200039000000000121034f000000000201043b000005c101000041000000800010043f000600000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001c60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001be0000413d000000000705004b000001d50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000067f0000613d0000001f01400039000000600110018f00000080021001bf000500000002001d000000400020043f000000200230008c0000048b0000413d000000800200043d000000000202004b000007bf0000c13d000005be020000410000000504000029000000000024043500000084021001bf00000020030000390000000000320435000000c402100039000005c5030000410000000000320435000000a4011000390000001a0200003900000000002104350000004001400210000005c6011001c70000169c00010430000000040320008a000005bb04000041000000200530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000e04043b000005bc04e0009c0000048b0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000048b0000213d000000090500008a0000000004000411000000000554016f000080070550008c0000051f0000c13d00000000050e004b0000057c0000c13d0000000001000416000000000101004b000004ed0000613d000007550000013d000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000048b0000213d0000000201000039000000020110018800000001011002700000025e0000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000600000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000027f0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002770000413d000000000705004b0000028e0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006a50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000601000029169a09fc0000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029169a0a320000040f0000000601000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000800000004001d000005bc0440009c0000048b0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000002e70000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003080000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003000000413d000000000705004b000003170000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000076d0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000501000029169a09fc0000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029169a0eda0000040f0000000501000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000400310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000003020003670000000401200370000000000101043b000005bd0310009c0000048b0000213d0000002402200370000000000202043b169a09fc0000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000700000001001d000005bc0110009c0000048b0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000048b0000213d000000020100003900000002011001880000000101100270000003910000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b20000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003aa0000413d000000000705004b000003c10000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cb0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029169a0a320000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005bd0110009c0000048b0000213d00000009010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007e80000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007e80000213d00000000001304350000000002020433000000010120008c000007e80000213d0000000101000039000000000202004b000004200000c13d0000000901000029000005e70110019800000000010000190000082c0000c13d000000010110018f000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000700000004001d000005bc0440009c0000048b0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000004670000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000006f10000c13d000005be01000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005ed01000041000000c40010043f000005ec01000041000000e40010043f000005ee010000410000169c000104300000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000005bd0210009c000004bd0000a13d00000000010000190000169c00010430000005be01000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000005e001000041000000c40010043f000005c0010000410000169c00010430000000400200043d0000001f0430018f0000000503300272000004a40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000049c0000413d000000000504004b000004b30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d000005e90320009c000004ef0000413d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d0000000000310435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005eb040000410000000805000029169a16850000040f00000001012001900000048b0000613d00000000010000190000169b0001042e0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007e80000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007e80000213d00000000003104350000000003020433000000010230008c000007e80000213d000000400200043d00000000033204360000000001010433000000010410008c000007e80000213d0000000000130435000005a801000041000005a80320009c00000000010240190000004001100210000005ea011001c70000169b0001042e000005be01000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f000005d101000041000000c40010043f000005d201000041000000e40010043f000005d301000041000001040010043f000005d4010000410000169c000104300000000001000416000000000101004b000007400000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400400043d000000240140003900000009020000290000000000210435000005e4010000410000000000140435000000040140003900008010020000390000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000008060000613d0000000801000029000005bc0110009c000004c00000213d0000000801000029000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000080070500003900008010070000390000000906000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d000005be01000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f000005bf01000041000000c40010043f000005c0010000410000169c0001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b000005bb09000041000000000a58004b000000000a000019000000000a098019000005bb0b500197000005bb0c800197000000000dbc004b0000000009008019000000000bbc013f000005bb0bb0009c00000000090ac019000000000909004b0000048b0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000007b90000c13d00000001077000390000000008e7004b000005810000413d0000000001000416000000000161004b000007550000c13d000000c30100008a0000000001310049000200000001001d000005bd01400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b00000002030000290000000003300031000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000002f20019000800000002001d0000006002200039000700000002001d000000000121034f000000000101043b000300000001001d000005d50100004100000000001004390000000001000410000600000001001d0000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000900000009001d169a168a0000040f000000080b0000290000000909000029000000040f000029000000050e00002900000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400a00043d000005d70100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005bd0210009c0000048b0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000048b0000c13d0000008402a00039000000000012043500000007010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b000005bb05000041000000000643004b00000000060000190000000006058019000005bb04400197000005bb07300197000000000847004b0000000005008019000000000447013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000003b30019000000000131034f000000000101043b000005bc0410009c0000048b0000213d00000020033000390000000002120049000005bb04000041000000000523004b00000000050000190000000005042019000005bb02200197000005bb06300197000000000726004b0000000004008019000000000226013f000005bb0220009c00000000020500190000000002046019000000000202004b0000048b0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000006380000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000006300000413d0000001f05100190000006470000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000604000029000000040340008c000006780000613d0000001f01100039000000200300008a000000000131016f000005d803000041000005d80510009c0000000001038019000005a803000041000005a805a0009c00080000000a001d000000000503001900000000050a401900000040055002100000006001100210000000000151019f000005a80520009c0000000002038019000000c002200210000000000121019f000005d9011000410000000303000029000000000203004b0000066b0000613d000005da011001c700008009020000390000000005000019169a16850000040f0000066d0000013d0000000002040019169a16850000040f000400000001035500000000030100190000006003300270000105a80030019d000005a8043001970000000102200190000000050e000029000000040f0000290000000909000029000000080a000029000008e00000613d000005bc01a0009c000004c00000213d0000004000a0043f00000001099000390000000001e9004b000005a90000413d000004ed0000013d000000400200043d0000001f0430018f00000005033002720000068c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006840000413d000000000504004b0000069b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006b20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006aa0000413d000000000504004b000006c10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d00000413d000000000504004b000006e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005c801000041000000800010043f0000000001000411000400000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000007100000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000007080000413d000000000705004b0000071f0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007930000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029169a0eda0000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400100043d0000008402100039000005dd0300004100000000003204350000006402100039000005de0300004100000000003204350000004402100039000005df030000410000000000320435000000240210003900000045030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000077a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007720000413d000000000504004b000007890000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000007a00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007980000413d000000000504004b000007af0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000c002100039000000400020043f00000005020000290000000000020435000000a001100039000300000001001d0000000000010435000000090100002900000024011000390000000301100367000000000101043b000400000001001d000005bd0110009c0000048b0000213d00000004010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000005020000290000000002020433000000010320008c000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000003020000290000000002020433000000010320008c0000089e0000a13d000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000000400100043d0000008402100039000005cb0300004100000000003204350000006402100039000005cc0300004100000000003204350000004402100039000005cd030000410000000000320435000000240210003900000043030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0340018f0000000504400272000008130000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000080b0000413d000000000503004b000008220000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400400043d000800000004001d000005e8010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a168a0000040f000000080a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008520000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000084a0000413d00000000090a0019000000000705004b000008620000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000008780000613d0000001f01400039000000600210018f0000000001920019000000000221004b00000000020000190000000102004039000005bc0410009c000004c00000213d0000000102200190000004c00000c13d000000400010043f000000200130008c0000048b0000413d0000000001090433000000000101004b000000000100001900000001010060390000041f0000013d000000400200043d0000001f0430018f0000000503300272000008850000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087d0000413d000000000504004b000008940000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000090100002900000084021000390000000301000367000000000221034f000000000202043b0000000803000029000000230330008a000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d000000090300002900000000023200190000000403200039000000000131034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d000000080100002900000000011000790000002404200039000005bb02000041000000000314004b00000000030000190000000003022019000005bb01100197000500000004001d000005bb04400197000000000514004b0000000002008019000000000114013f000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000009010000290000004401100039169a0a280000040f000000000601001900000007010000290000000402000029000000060300002900000005040000290000000805000029169a13880000040f00000000010000190000169b0001042e000000400200043d0000001f0340018f0000000504400272000008ed0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008e50000413d000000000503004b000008fc0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000001f03100039000005bb04000041000000000523004b00000000050000190000000005044019000005bb06200197000005bb03300197000000000763004b000000000400a019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b0000091f0000613d0000000303100367000000000303043b000005bc0430009c0000091f0000213d00000020011000390000000004310019000000000224004b0000091f0000213d0000000002030019000000000001042d00000000010000190000169c00010430000300000000000200000000070004140000000008450019000000000558004b00000000050000190000000105004039000005a8044001970000000105500190000009af0000c13d0000000006000031000000000586004b000009af0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005ef0570009c000009bd0000813d0000000002860049000005a80220019700000000022403df000000c001700210000005f001100197000005f1011001c700000000011203af0000801002000039169a168f0000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000009cf0000613d0000003f01300039000005f202100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000005bc0520009c000009b50000213d0000000104400190000009b50000c13d000000400020043f00000000023104360000001f0430003900000005044002720000095e0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000009560000413d000000000400004b000009600000613d0000000104000031000000000443004b000009bb0000213d00000004050003670000001f0430018f0000000503300272000009700000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000009680000413d000000000604004b0000097f0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000003040000290000000205000029000009ea0000c13d0000000002020433000000400100043d000000a003100039000000000023043500000080021000390000000000520435000000600210003900000001030000290000000000320435000005bd02400197000000400310003900000000002304350000002002100039000005f4030000410000000000320435000000a0030000390000000000310435000005f50310009c000009b50000213d000000c003100039000000400030043f000005a803000041000005a80420009c000000000203801900000040022002100000000001010433000005a80410009c00000000010380190000006001100210000000000121019f0000000002000414000005a80420009c0000000002038019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f0000000102200190000009bb0000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000009da0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000009d30000413d000000000504004b000009e80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400100043d0000004402100039000005f303000041000000000032043500000024021000390000001f030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000400300043d00000060043000390000000000240435000005bd011001970000004002300039000000000012043500000060010000390000000001130436000005f7020000410000000000210435000005f80230009c00000a200000813d0000008002300039000000400020043f000005a802000041000005a80410009c000000000102801900000040011002100000000003030433000005a80430009c00000000030280190000006003300210000000000113019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f000000010220019000000a260000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c000104300000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b00000a300000c13d000000000001042d00000000010000190000169c000104300008000000000002000700000001001d000000000101004b00000d250000613d000300000004001d000400000003001d000000400400043d000200000002001d000005bd022001970000ffff0120008c00000d370000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000a630000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000a5b0000413d000000000705004b00000a720000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d4b0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c00000d130000213d000000010110019000000d130000c13d000000400040043f0000001f0130008c00000d110000a13d00000000010a0433000000000101004b000000040140003900000d710000c13d000005fb02000041000000000024043500000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aab0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000aa30000413d000000000705004b00000aba0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d810000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000da70000c13d000005c1010000410000000000140435000000040140003900000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aee0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000ae60000413d000000000705004b00000afd0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000db80000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000dde0000613d000005ca0140009c00000d130000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f0000000503000029000000010220019000000d110000613d000000000101043b0000000002030433000000020320008c00000d190000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000d190000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b00000ba70000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e680000613d0000000102000029000005bc0120009c00000d130000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e8e0000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f00000000010004160000060101100197000000000001041700000bd80000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000eb40000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a804400197000000010330019000000d1f0000c13d0000000003000031000000000523004b00000d1f0000413d0000000304400367000005ef0510009c00000def0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000202000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a8033001970004000000010355000000010220019000000e010000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c00000d130000213d000000010220019000000d130000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000c170000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000c0f0000413d000000000100004b00000c190000613d0000000101000031000000000113004b00000d110000213d00000004020003670000001f0130018f000000050330027200000c290000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000c210000413d000000000401004b00000c380000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e1c0000613d0000000609000029000005bc0190009c000000050100002900000d130000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b000000040400002900000d110000c13d0000000002040433000005bc0320009c00000d110000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b00000d110000c13d0000000023020434000005bc0430009c00000d130000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c00000d130000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000d110000213d000000000432004b00000cb70000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b00000d110000c13d000000400500043d000005ca0650009c00000d130000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000c9c0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000606000029000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000ce30000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000cd90000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e420000613d0000000602000029000005bc0120009c000000000102001900000d130000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f000000010120019000000d110000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d580000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d500000413d000000000504004b00000d670000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fa030000410000000000320435000000240240003900000015030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d8e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d860000413d000000000504004b00000d9d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fc020000410000000000210435000000240140003900000013020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000dc50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000dbd0000413d000000000504004b00000dd40000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f000000050230027200000e0c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000e050000413d000000000504004b00000e1a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f000000050440027200000e290000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e210000413d000000000503004b00000e380000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e4f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e470000413d000000000503004b00000e5e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e750000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e6d0000413d000000000503004b00000e840000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e9b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e930000413d000000000503004b00000eaa0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000ec10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000eb90000413d000000000503004b00000ed00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300008000000000002000300000005001d000700000001001d000000000101004b000011d30000613d000400000003001d000200000004001d000000400400043d000100000002001d000005bd022001970000ffff0120008c000011e50000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f0c0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f040000413d000000000705004b00000f1b0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000011f90000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c000011c10000213d0000000101100190000011c10000c13d000000400040043f0000001f0130008c000011bf0000a13d00000000010a0433000000000101004b0000121f0000c13d000005fb010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f540000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f4c0000413d000000000705004b00000f630000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012300000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000000401400039000012560000c13d000005c102000041000000000024043500000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f970000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f8f0000413d000000000705004b00000fa60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012660000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000128c0000613d000005ca0140009c000011c10000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000011c70000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f00000005030000290000000102200190000011bf0000613d000000000101043b0000000002030433000000010320008c0000000405000029000011c70000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000011c70000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b000010550000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013160000613d0000000402000029000005bc0120009c000011c10000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000133c0000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f000000000100041600000601011001970000000000010417000010860000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013620000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a8044001970000000103300190000011cd0000c13d0000000003000031000000000523004b000011cd0000413d0000000304400367000005ef0510009c0000129d0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000102000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000012af0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000011c10000213d0000000102200190000011c10000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000010c50000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000010bd0000413d000000000100004b000010c70000613d0000000101000031000000000113004b000011bf0000213d00000004020003670000001f0130018f0000000503300272000010d70000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000010cf0000413d000000000401004b000010e60000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012ca0000613d0000000609000029000005bc0190009c0000000501000029000011c10000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000011bf0000c13d0000000002040433000005bc0320009c000011bf0000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000011bf0000c13d0000000023020434000005bc0430009c000011c10000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c000011c10000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000011bf0000213d000000000432004b000011650000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000011bf0000c13d000000400500043d000005ca0650009c000011c10000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000114a0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000011910000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000011870000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012f00000613d0000000602000029000005bc0120009c0000000001020019000011c10000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f0000000101200190000011bf0000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012060000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000011fe0000413d000000000504004b000012150000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fa020000410000000000210435000000240140003900000015020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000123d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012350000413d000000000504004b0000124c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fc030000410000000000320435000000240240003900000013030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012730000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000126b0000413d000000000504004b000012820000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000012ba0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000012b30000413d000000000504004b000012c80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000012d70000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012cf0000413d000000000503004b000012e60000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000012fd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012f50000413d000000000503004b0000130c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013230000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000131b0000413d000000000503004b000013320000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013490000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013410000413d000000000503004b000013580000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000136f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013670000413d000000000503004b0000137e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300009000000000002000500000005001d000700000003001d000800000002001d000600000001001d0000000002000416000000000106004b0000152f0000613d000300000004001d000400000002001d000000000102004b000013cb0000613d000005d50100004100000000001004390000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000000801000029000005bd01100197000000240240003900000000001204350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000016240000613d0000000902000029000005bc0120009c000015790000213d000000400020043f000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d0000000701000029000005ff0110019700000600011001c7000000400400043d00000024024000390000000000120435000005fe0100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039000100000002001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015850000613d0000000202000029000005bc0120009c0000000401000029000015790000213d000000400020043f000000000101004b000014070000613d0000000001000416000006010110019700000000000104170000000001000414000000030400002900000005030000290000000002430019000000000332004b00000000030000190000000103004039000005a80440019700000001033001900000157f0000c13d0000000003000031000000000523004b0000157f0000413d0000000304400367000005ef0510009c000015ab0000813d0000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af0000000602000029000005bd0d200197000000080200002900080000000d001d169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000015bd0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000015790000213d0000000102200190000015790000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000014460000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000143e0000413d000000000100004b000014480000613d0000000101000031000000000113004b000015770000213d00000004020003670000001f0130018f0000000503300272000014580000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000014500000413d000000000401004b000014670000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000001020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d00000603010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015d80000613d0000000609000029000005bc0190009c0000000501000029000015790000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000015770000c13d0000000002040433000005bc0320009c000015770000213d000000000114001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000015770000c13d0000000023020434000005bc0430009c000015790000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004490019000005bc0540009c000015790000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000015770000213d000000000432004b000014e60000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000015770000c13d000000400500043d000005ca0650009c000015790000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b000014cb0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000090200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000015120000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000015080000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000500000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015fe0000613d0000000502000029000005bc0120009c000015660000a13d000015790000013d000000000102004b0000164a0000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000000240140003900000007020000290000000000210435000005e40100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000165f0000613d0000000502000029000005bc0120009c000015790000213d0000000601000029000005bd01100197000800000001001d000000400020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000080500002900000007060000290000000907000029169a16850000040f0000000101200190000015770000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400200043d0000001f0340018f0000000504400272000015920000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000158a0000413d000000000503004b000015a10000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000015c80000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015c10000413d000000000504004b000015d60000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000015e50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015dd0000413d000000000503004b000015f40000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000160b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016030000413d000000000503004b0000161a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000016310000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016290000413d000000000503004b000016400000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0340018f00000005044002720000166c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016640000413d000000000503004b0000167b0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c0001043000001688002104210000000102000039000000000001042d0000000002000019000000000001042d0000168d002104230000000102000039000000000001042d0000000002000019000000000001042d00001692002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d001900001698002104290000000102000039000000000001042d0000000002000019000000000001042d0000169a000004320000169b0001042e0000169c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000e9f18c1600000000000000000000000000000000000000000000000000000000ecf95b8900000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb600000000000000000000000000000000000000000000000000000000e9f18c1700000000000000000000000000000000000000000000000000000000ec8067c7000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000da37f07f000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff54686520636f64652068617368206973206e6f74206b6e6f776e00000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a40000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb000000000000000000000000000000000000010400000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f496e617070726f7072696174652063616c6c65720000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e5000000000000000000000000ffffffffffffffffffffffffffffffffffff00004de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c200000000000000000000000000000000000000084000000800000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe06b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f4f766572666c6f7700000000000000000000000000000000000000000000000063bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000579952fc000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0001000100000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f000000000039187a54c09fddd78293acb1d6fafb891fffc8438366fb93b8fe735877e8b717", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/DefaultAccount.json b/src/deps/contracts/DefaultAccount.json index 6ab12283..fec43b83 100644 --- a/src/deps/contracts/DefaultAccount.json +++ b/src/deps/contracts/DefaultAccount.json @@ -533,8 +533,8 @@ "type": "receive" } ], - "bytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005ff0430019700030000004103550002000000010355000005ff0030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000006010430009c000000450000a13d000006020430009c000000a90000613d000006030430009c000000ea0000613d000006040330009c000000a60000c13d000000040220008a0000060703000041000000200420008c000000000400001900000000040340190000060705200197000000000605004b000000000300a019000006070550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000006080310009c0000010d0000213d00000000011200490000060702000041000002600310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d0000002001000039000001000010044300000120000004430000060001000041000017f80001042e000000000102004b000000a60000c13d0000000001000019000017f80001042e000006050430009c000000eb0000613d000006060330009c000000a60000c13d000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000006080430009c0000010d0000213d000000040530003900000000045200490000060706000041000002600740008c000000000700001900000000070640190000060704400197000000000804004b000000000600a019000006070440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d000000000400041200000609064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b0000060708000041000000000976004b000000000900001900000000090880190000060707700197000006070a600197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000006080760009c0000010d0000213d000000000762004900000020025000390000060708000041000000000972004b000000000900001900000000090820190000060707700197000006070a200197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000061501000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062d01000041000000c40010043f0000062e01000041000000e40010043f0000062c01000041000017f90001043017f717aa0000040f0000000001000019000017f80001042e000000040320008a0000060704000041000000600630008c000000000600001900000000060440190000060703300197000000000703004b000000000400a019000006070330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000006080370009c0000010d0000213d000000040670003900000000036200490000060704000041000002600830008c000000000800001900000000080440190000060703300197000000000903004b000000000400a019000006070330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d000000000300041200000609033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b0000060904400197000000000303043b0000060a0830009c000001310000413d00000044015000390000061402000041000000000021043500000024015000390000000802000039000000000021043500000615010000410000000000150435000000040150003900000020020000390000000000210435000005ff01000041000005ff0250009c0000000001054019000000400110021000000616011001c7000017f90001043017f716020000040f000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000006080330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d00000000023200490000060703000041000002600420008c000000000400001900000000040340190000060702200197000000000502004b000000000300a019000006070220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017f9000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d000000000100041200000609011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d00000020031000390000062f0400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006300310009c0000015e0000413d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f900010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b0000060708000041000000000975004b000000000900001900000000090880190000060707700197000006070a500197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000006080160009c0000010d0000213d000000000162004900000020025000390000060705000041000000000712004b0000000007000019000000000705201900000607011001970000060708200197000000000918004b0000000005008019000000000118013f000006070110009c00000000010700190000000001056019000000000101004b0000010d0000c13d00000000010004140000060b0510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f00000000040104330000060b0540009c000001740000413d00000615020000410000000000230435000000a40210003900000614040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005ff01000041000005ff0230009c0000000001034019000000400110021000000616011001c7000017f900010430000000c0022002100000061102200197000000400110021000000631011000410000063201100197000000000112019f00000060024002100000063302200197000000000121019f00000634011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917f717e30000040f00030000000103550000006001100270000105ff0010019d000005ff041001970000003f014000390000063505100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000006080630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012a20000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002a30000c13d0000000702000029000000000121034f000000000101043b000000800210008c0000031e0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000090200002900000021022000390000000000120435000004760000013d000000000221034f000000000202043b0000060c02200197000006170720009c0000026e0000c13d000000430260008c000002850000213d0000061501000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062a01000041000000c40010043f0000062b01000041000000e40010043f0000062c01000041000017f9000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060c088001970000060d0980009c0000024a0000613d0000060e0980009c0000024a0000613d0000060f0980009c0000024a0000613d000006100580009c00000000050000190000000105006039000000010550018f0000000008260019000005ff02200197000000000227034f000000000703004b0000027a0000c13d000000000368004b0000027f0000413d0000000003000031000000000683004b0000027f0000413d00000612060000410000061307000041000000000505004b00000000050600190000000005076019000000c0011002100000061101100197000000000115019f0000000003830049000005ff0330019700000000023203df00000000011203af000000000204001917f717ed0000040f000002fc0000013d0000000001010433000005ff02000041000005ff0410009c0000000001028019000005ff0430009c000000000203401900000040022002100000006001100210000000000121019f000017f900010430000006180120009c000000430000613d0000061501000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000061901000041000000c40010043f0000061a01000041000017f900010430000000000668004b0000027f0000413d0000000006000031000000000786004b000002f20000813d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f9000104300000002402500039000000000221034f000000000202043b000b00000002001d000006090220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061b02000041000000800020043f0000060902400197000800000002001d000000840020043f0000060901100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c000003970000c13d0000000103000031000000200130008c00000020040000390000000004034019000003c30000013d000000710320008c0000033b0000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d00000000044200190000060705000041000000000643004b0000000006000019000000000605801900000607044001970000060707300197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000006080410009c0000010d0000213d000000000212004900000020033000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d00000000020004140000000004310019000000000114004b00000000010000190000000101004039000005ff0330019700000001011001900000027f0000c13d0000000001000031000000000541004b0000027f0000413d00000002033003670000060b0520009c000007da0000413d000000400100043d00000044021000390000061403000041000000000032043500000024021000390000000803000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f9000104300000000006860049000005ff0660019700000000026203df000000c001100210000006110110019700000612011001c700000000011203af0000800902000039000000000600001917f717ed0000040f000300000001035500000000030100190000006003300270000105ff0030019d000005ff033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000030e0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003070000413d000000000504004b0000031c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400200043d000900000002001d000006390220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000032a0000413d00000009030000290000000003030433000000000303004b0000046d0000c13d0000064b0100004100000000001004350000003201000039000000040010043f0000064c01000041000017f900010430000000020120008c000003eb0000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005b10000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000003840000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000037c0000413d000000000500004b000003860000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005ce0000013d000005ff02000041000005ff0310009c0000000001028019000000c0011002100000061c011001c70000000b0200002917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b00000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003a80000413d000000000705004b000003bf0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004470000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a0024000390000061d030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061e03000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c000005470000c13d00000001020000390000000101000031000005580000013d000000010120008c000004c70000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006430000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004340000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000042c0000413d000000000500004b000004360000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006600000013d000000400200043d0000001f0430018f0000000503300272000004540000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000044c0000413d000000000504004b000004630000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004d90000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004b40000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004ac0000413d000000000500004b000004b60000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004f60000013d000000400100043d00000044021000390000063603000041000000000032043500000024021000390000001703000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004e30000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006b00000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000005340000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000052c0000413d000000000600004b000005360000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006cd0000013d000005ff04000041000005ff0530009c000000000304801900000060033002100000004002200210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000700000003001d000000000301004b000005810000c13d00000007010000290000000031010434000200000003001d000000000202004b0000061e0000c13d000000000201004b000007610000c13d000000400400043d000b00000004001d0000061501000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005a10000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b000005990000413d000000000604004b0000055c0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000055c0000013d000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005bb0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c0000076c0000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000060b0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006030000413d000000000600004b0000060d0000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000007890000013d000000000201004b00000a360000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a320000c13d000000400100043d00000044021000390000062903000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000064d0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009c40000413d00000080032002700000063b0420009c000000000302a0190000063b0420009c0000000004000019000000100400203900000008054001bf000006080630009c00000000040520190000004005300270000006080630009c000000000305201900000004054001bf000005ff0630009c00000000040520190000002005300270000005ff0630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005530436000000210640003900000005066002720000069d0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006950000413d000000000600004b0000069f0000613d0000000006030433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009e10000013d000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006ba0000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006db0000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006d40000413d000000000143001900000000000104350000000004020433000000000504004b000006e80000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006e10000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000006080220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f000006390110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f00000020025000390000063d0300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bd20000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000005040000290000000003340436000000210420003900000005044002720000074c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007440000413d000000000400004b0000074e0000613d00000005040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000bf20000013d000005ff020000410000000204000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000007760000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a730000413d00000080043002700000063b0530009c000000000403a0190000063b0530009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007c70000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007bf0000413d000000000700004b000007c90000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a900000013d0000000001410049000005ff0110019700000000011303df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff033001970003000000010355000000010220019000000ae10000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008050000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007fd0000413d000000000400004b000008070000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008170000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b0000080f0000413d000000000604004b000008260000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b0000060706000041000000000753004b0000000007000019000000000706801900000607055001970000060708300197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000006080350009c0000010d0000213d0000000503500210000000000434004900000020061000390000060701000041000000000746004b0000000007000019000000000701201900000607044001970000060708600197000000000948004b0000000001008019000000000448013f000006070440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d00000020041000390000064205500198000008650000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b0000085d0000413d000000000200004b000008670000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000006080520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005ff02000041000005ff0340009c0000000003020019000000000304401900000040033002100000000001010433000005ff0410009c00000000010280190000006001100210000000000131019f0000000003000414000005ff0430009c0000000002034019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b0000060706000041000000000754004b0000000007000019000000000706801900000607055001970000060708400197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000006080310009c0000010d0000213d000000000212004900000020034000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005ff043001970000027f0000413d0000000003000031000000000513004b0000027f0000413d0000000204400367000005ff0520009c000002e00000213d0000000001130049000005ff0110019700000000011403df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff0330019700030000000103550000000102200190000014500000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008eb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008e30000413d000000000400004b000008ed0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008fd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008f50000413d000000000604004b0000090c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000644030000410000000000320435000001c0030000390000000000310435000006450310009c0000012b0000213d000001e003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b000006460300004100000000003204350000008003400039000000000013043500000060014000390000064703000041000000000031043500000040014000390000064803000041000000000031043500000080010000390000000000140435000006490140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005ff01000041000005ff0320009c000000000201801900000040022002100000000003040433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064a0400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000006250310009c0000012b0000213d0000008003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400300043d000006390430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009ce0000413d0000000005030433000000000505004b000003350000613d000000f8052002100000060706000041000000000202004b0000000002050019000000000206601900000000050404330000063a05500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b640000413d00000080042002700000063b0520009c000000000402a0190000063b0520009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a1f0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a170000413d000000000700004b00000a210000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b810000013d00000007010000290000000001010433000000000201004b00000a600000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a600000c13d000000400100043d00000064021000390000062703000041000000000032043500000044021000390000062803000041000000000032043500000024021000390000002a03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400300043d0000002401300039000000090200002900000000002104350000061b010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000afc0000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b2f0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a7d0000413d0000000006040433000000000606004b000003350000613d000000f8063002100000060707000041000000000303004b0000000003060019000000000307601900000000060504330000063a06600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c670000413d00000080053002700000063b0630009c000000000503a0190000063b0630009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ace0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000ac60000413d000000000800004b00000ad00000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c840000013d0000001f0430018f000000050230027200000aec0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ae50000413d000000000504004b00000afa0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000005ff02000041000005ff0310009c00000000010280190000000704000029000005ff0340009c00000000020440190000004002200210000000c001100210000000000121019f00000621011001c70000000b0200002917f717e80000040f000000070a00002900000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b1b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b130000413d000000000705004b00000b2b0000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c410000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000006080410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000cd50000c13d00000044021000390000000a03000029000000000032043500000020021000390000061d03000041000000000032043500000024031000390000000904000029000000000043043500000003030000290000000000310435000006250310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f000006260310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061e03000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000df70000c13d0000000102000039000000010100003100000e0a0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b6e0000413d0000000006040433000000000606004b000003350000613d000000f8062002100000060707000041000000000202004b0000000002060019000000000207601900000000060504330000063a06600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cfb0000413d00000080052002700000063b0620009c000000000502a0190000063b0620009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bbf0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bb70000413d000000000800004b00000bc10000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d180000013d000000400200043d000500000002001d000006390220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bde0000413d00000005030000290000000003030433000000000303004b000003350000613d000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d00000000044300190000060705000041000000000641004b0000000006000019000000000605801900000607044001970000060707100197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000006080510009c0000010d0000213d000000000513004900000020034000390000060704000041000000000653004b0000000006000019000000000604201900000607055001970000060707300197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f320000c13d000000000132034f000000000101043b000000010200008a0000060703000041000000000221004b000000000200001900000000020320190000060701100197000006070410009c00000000030080190000060701100167000006070110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010900000c13d000000400100043d000400000001001d000006390110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063c02000041000000000021043500000001010000390000000000130435000010900000013d000000400200043d0000001f0430018f000000050330027200000c4e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c460000413d000000000504004b00000c5d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c710000413d0000000007050433000000000707004b000003350000613d000000f8073002100000060708000041000000000303004b0000000003070019000000000308601900000000070604330000063a07700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d790000413d00000080063002700000063b0730009c000000000603a0190000063b0730009c0000000007000019000000100700203900000008087001bf000006080960009c00000000070820190000004008600270000006080960009c000000000608201900000004087001bf000005ff0960009c00000000070820190000002008600270000005ff0960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000006080a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cc20000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cba0000413d000000000900004b00000cc40000613d0000000009060433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063c0990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d960000013d00000064021000390000062203000041000000000032043500000044021000390000062303000041000000000032043500000024021000390000003603000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001f03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000d050000413d0000000007050433000000000707004b000003350000613d000000f8072002100000060708000041000000000202004b0000000002070019000000000208601900000000070604330000063a07700197000000000227019f0000000000260435000000400600043d000006390260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f00000020076000390000063d0800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e630000413d00000080072002700000063b0820009c000000000702a0190000063b0820009c0000000008000019000000100800203900000008098001bf000006080a70009c00000000080920190000004009700270000006080a70009c000000000709201900000004098001bf000005ff0a70009c00000000080920190000002009700270000005ff0a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000006080b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d660000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d5e0000413d000000000a00004b00000d680000613d000000000a070433000000000a0a004b000003350000613d000000000a0904330000063a0aa00197000000f80b800210000000000aab019f0000063c0aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e800000013d000000400600043d000006390760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d830000413d0000000008060433000000000808004b000003350000613d000000f8083002100000060709000041000000000303004b0000000003080019000000000309601900000000080704330000063a08800197000000000338019f0000000000370435000000400700043d000006390370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f00000020087000390000063d090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f950000413d00000080083002700000063b0930009c000000000803a0190000063b0930009c00000000090000190000001009002039000000080a9001bf000006080b80009c00000000090a2019000000400a800270000006080b80009c00000000080a2019000000040a9001bf000005ff0b80009c00000000090a2019000000200a800270000005ff0b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000006080ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000de40000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000ddc0000413d000000000b00004b00000de60000613d000000000b080433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c900210000000000bbc019f0000063c0bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fb20000013d000005ff04000041000005ff0520009c00000000020480190000004002200210000005ff0530009c00000000030480190000006003300210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000900000003001d000000000301004b00000e330000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f680000c13d000000000201004b0000115f0000c13d000000400400043d000b00000004001d000006150100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e530000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e4b0000413d000000000604004b00000e0e0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e0e0000013d000000400700043d000006390870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e6d0000413d0000000009070433000000000909004b000003350000613d000000f809200210000006070a000041000000000202004b000000000209001900000000020a601900000000090804330000063a09900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e8d0000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e860000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e9c0000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e950000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000eab0000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000ea40000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eba0000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000eb30000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ec90000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000ec20000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ed80000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ed10000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000006080450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012c60000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013440000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013440000013d000000380210008c000010730000413d0000002002100270000005ff0310009c00000000030100190000000003022019000005ff0210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000006390440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f500000413d00000004040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063e044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010900000013d000000000201004b00000f7f0000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006310000613d00000009010000290000000001010433000000000201004b000000430000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a4b0000613d000000430000013d000000400800043d000006390980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f9f0000413d000000000a080433000000000a0a004b000003350000613d000000f80a300210000006070b000041000000000303004b00000000030a001900000000030b6019000000000a0904330000063a0aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fbf0000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fb80000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fce0000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fc70000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fdd0000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fd60000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fec0000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fe50000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ffb0000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000ff40000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b0000100a0000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b000010030000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b000010190000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010120000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000006080450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012f80000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013d70000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013d70000013d000000400200043d000400000002001d000006390220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000107f0000413d00000004030000290000000003030433000000000303004b000003350000613d000000f80110021000000000030204330000063a03300197000000000113019f0000060701100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000011050000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b0000060704000041000000000659004b0000000006000019000000000604801900000607055001970000060707900197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000006080a20009c0000010d0000213d00000000032300490000002009900039000006070a000041000000000b39004b000000000b000019000000000b0a201900000607033001970000060709900197000000000c39004b000000000a008019000000000339013f000006070330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000060802200197000000380320008c000011a70000413d0000002003200270000005ff0420009c00000000040200190000000004032019000005ff0320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d000006390560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010ef0000413d0000000005060433000000000505004b000003350000613d00000000050404330000063a05500197000000f807300210000000000557019f00000640055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011c10000013d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000800210008c0000116a0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004420436000000210530003900000005055002720000114c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000011440000413d000000000500004b0000114e0000613d0000000005020433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c000000000100201900000021032000390000000000130435000011870000013d000005ff020000410000000704000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000011740000413d0000000004020433000000000404004b000003350000613d000000f8041002100000060705000041000000000101004b0000000001040019000000000105601900000000040304330000063a04400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b000011940000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b0000118d0000413d00000000024300190000064d0400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000006080420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f0000000202000367000010980000013d000000400600043d000006390360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011b10000413d0000000004060433000000000404004b000003350000613d000000f80220021000000000040304330000063a04400197000000000242019f0000063f02200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b0000060707000041000000000854004b0000000008000019000000000807801900000607055001970000060709400197000000000a59004b0000000007008019000000000559013f000006070550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000006080340009c0000010d0000213d000000000242004900000020055000390000060703000041000000000725004b0000000007000019000000000703201900000607022001970000060708500197000000000928004b0000000003008019000000000228013f000006070220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011f90000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011f20000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b0000120a0000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012020000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b0000121b0000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012130000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b0000122c0000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012240000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b0000123d0000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012350000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b0000124e0000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012460000413d0000000008870019000000000008043500000000066700190000001f0740018f0000002008600039000000020550036700000005094002720000125f0000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000012570000413d000000000a07004b0000126e0000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b0000127c0000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b000012750000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005ff01000041000005ff0430009c000000000301801900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000a0100002917f717c10000040f0000064e02000041000000000020043900000008020000290000000400200443000800000001001d0000800a01000039000000240200003917f715f10000040f0000000802000029000000000112004b0000000001000019000000010100a03917f7167d0000040f0000000b01000029000001e4021000390000000a0100002917f716950000040f000000000300003117f716c10000040f0000000002010019000000090100002917f716fc0000040f0000064f02000041000000000101004b00000000010200190000000001006019000000400200043d0000000000120435000005ff01000041000005ff0320009c0000000001024019000000400110021000000650011001c7000017f80001042e000000380760008c0000132a0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000012e10000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013440000013d000000380760008c000013bd0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013130000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013d70000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013330000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000134e0000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000146b0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000013a70000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000014840000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013c60000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013e10000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000152e0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000143a0000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015470000013d0000001f0430018f00000005023002720000145b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014540000413d000000000504004b000014690000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000014740000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000006070a000041000000000b83004b000000000b000019000000000b0a80190000060708800197000006070c300197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020093000390000060703000041000000000a49004b000000000a000019000000000a0320190000060704400197000006070b900197000000000c4b004b000000000300801900000000044b013f000006070440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d0000002004300039000006340a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000014bc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000014b50000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000014cb0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000014c40000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b000014da0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000014d30000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a800272000014eb0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000014e30000413d000000000b06004b000014fa0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000015080000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015010000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000006080510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005ff01000041000005ff0240009c0000000002010019000000000204401900000040022002100000000003030433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015370000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000006070a000041000000000b82004b000000000b000019000000000b0a80190000060708800197000006070c200197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020092000390000060702000041000000000a49004b000000000a000019000000000a0220190000060704400197000006070b900197000000000c4b004b000000000200801900000000044b013f000006070440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006410a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b0000157f0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015780000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b0000158e0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000015870000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b0000159d0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000015960000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000015ae0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000015a60000413d000000000b06004b000015bd0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000015cb0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015c40000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000006080510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005ff01000041000005ff0340009c0000000003010019000000000304401900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d0000000003010019000005ff010000410000000004000414000005ff0540009c0000000001044019000000c001100210000000600220021000000000011200190000065101100041000000000203001917f717e80000040f0000000102200190000016000000613d000000000101043b000000000001042d0000000001000019000017f9000104300003000000000002000000040100008a000000000310003100000607010000410000005f0230008c000000000200001900000000020120190000060704300197000000000504004b0000000001008019000006070440009c000000000102c019000000000101004b000016480000613d00000002010003670000004402100370000000000202043b000006080420009c000016480000213d00000000032300490000060704000041000002600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b000016480000c13d0000000003000411000080010330008c000016460000c13d000000000300041200000609033001970000000004000410000000000343004b000016460000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000164a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005ff02000041000005ff0310009c0000000001028019000000c001100210000080010200003917f717e30000040f000000010300002900030000000103550000006001100270000105ff0010019d000000200130011a00000001012001950000000101200190000016620000613d0000000001000019000017f80001042e0000000001000019000017f90001043000000000431200a900000000422300d9000000000112004b000016770000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000016370000613d000005ff02000041000005ff0410009c0000000001028019000000c00110021000000641011001c700008009020000390000800104000039000000000500001917f717e30000040f0000000003000415000000020330008a00000020033000c90000163f0000013d000000400100043d00000064021000390000065203000041000000000032043500000044021000390000065303000041000000000032043500000024021000390000002503000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f9000104300000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000000000101004b000016800000613d000000000001042d000000400100043d00000064021000390000065403000041000000000032043500000044021000390000065503000041000000000032043500000024021000390000002203000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000000300003100000000041300490000001f0540008a0000000204000367000000000224034f000000000202043b0000060706000041000000000752004b0000000007000019000000000706401900000607055001970000060708200197000000000958004b000000000600a019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b000016bf0000613d0000000001120019000000000214034f000000000202043b000006080420009c000016bf0000213d000000000323004900000020011000390000060704000041000000000531004b0000000005000019000000000504201900000607033001970000060706100197000000000736004b0000000004008019000000000336013f000006070330009c00000000030500190000000003046019000000000303004b000016bf0000c13d000000000001042d0000000001000019000017f9000104300000000004010019000006560120009c000016f40000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000006080750009c000016f40000213d0000000106600190000016f40000c13d000000400050043f00000000052104360000000006420019000000000336004b000016fa0000213d0000001f0320018f00000002044003670000000506200272000016e20000613d000000000700001900000005087002100000000009850019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000016da0000413d000000000703004b000016f10000613d0000000506600210000000000464034f00000000066500190000000303300210000000000706043300000000073701cf000000000737022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000373019f000000000036043500000000022500190000000000020435000000000001042d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f9000104300000000001000019000017f9000104300000000043020434000000410330008c0000174f0000c13d00000041032000390000000003030433000000ff0330018f0000001d0530008a000000030600008a000000000565004b000017610000a13d000000400220003900000000050204330000000004040433000000400200043d000006580650009c000017730000813d00000060062000390000000000560435000000400520003900000000004504350000002004200039000000000034043500000000001204350000000000000435000005ff010000410000000003000414000005ff0430009c0000000003018019000005ff0420009c00000000010240190000004001100210000000c002300210000000000112019f00000659011001c7000000010200003917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000017310000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b0000172a0000413d000000000605004b0000173f0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000017840000613d000000000100043300000609011001970000000002000410000000000221004b00000000020000190000000102006039000000000101004b0000000001000019000000010100c039000000000112016f000000010110018f000000000001042d000000400100043d00000044021000390000065703000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d00000044021000390000065b03000041000000000032043500000024021000390000001603000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f90001043000000044012000390000065a03000041000000000031043500000024012000390000000903000039000000000031043500000615010000410000000000120435000000040120003900000020030000390000000000310435000005ff01000041000005ff0320009c0000000001024019000000400110021000000616011001c7000017f900010430000000400200043d0000001f0430018f0000000503300272000017910000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000017890000413d000000000504004b000017a00000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f9000104300000000001000411000080010110008c000017ae0000613d000000000001042d0000064b0100004100000000001004350000000101000039000000040010043f0000064c01000041000017f900010430000000000403004b000017be0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b70000413d00000000012300190000000000010435000000000001042d000000e0031000390000000202000367000000000332034f000000000303043b0000060903300198000017cb0000613d0000012001100039000000000112034f000000000101043b000017dc0000013d000000a003100039000000000332034f0000006004100039000000000442034f000000000404043b000000000503043b00000000634500a9000000000605004b000017d70000613d00000000655300d9000000000445004b000017dd0000c13d0000012001100039000000000112034f000000000101043b000000000131001a000017dd0000413d000000000001042d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000017e6002104210000000102000039000000000001042d0000000002000019000000000001042d000017eb002104230000000102000039000000000001042d0000000002000019000000000001042d000017f0002104210000000102000039000000000001042d0000000002000019000000000001042d000017f5002104230000000102000039000000000001042d0000000002000019000000000001042d000017f700000432000017f80001042e000017f9000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f19010000000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39202bcce700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000002000002000000000000000000000000000000000000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f706575650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c00000000000000000000000000000000000000000000000100000000000000005369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f72203238000000000000000000006a1bd7e3ec749c513a118c441484f53b26b29841d2cab7a6b59c99038c788885", - "deployedBytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005ff0430019700030000004103550002000000010355000005ff0030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000006010430009c000000450000a13d000006020430009c000000a90000613d000006030430009c000000ea0000613d000006040330009c000000a60000c13d000000040220008a0000060703000041000000200420008c000000000400001900000000040340190000060705200197000000000605004b000000000300a019000006070550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000006080310009c0000010d0000213d00000000011200490000060702000041000002600310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d0000002001000039000001000010044300000120000004430000060001000041000017f80001042e000000000102004b000000a60000c13d0000000001000019000017f80001042e000006050430009c000000eb0000613d000006060330009c000000a60000c13d000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000006080430009c0000010d0000213d000000040530003900000000045200490000060706000041000002600740008c000000000700001900000000070640190000060704400197000000000804004b000000000600a019000006070440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d000000000400041200000609064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b0000060708000041000000000976004b000000000900001900000000090880190000060707700197000006070a600197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000006080760009c0000010d0000213d000000000762004900000020025000390000060708000041000000000972004b000000000900001900000000090820190000060707700197000006070a200197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000061501000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062d01000041000000c40010043f0000062e01000041000000e40010043f0000062c01000041000017f90001043017f717aa0000040f0000000001000019000017f80001042e000000040320008a0000060704000041000000600630008c000000000600001900000000060440190000060703300197000000000703004b000000000400a019000006070330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000006080370009c0000010d0000213d000000040670003900000000036200490000060704000041000002600830008c000000000800001900000000080440190000060703300197000000000903004b000000000400a019000006070330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d000000000300041200000609033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b0000060904400197000000000303043b0000060a0830009c000001310000413d00000044015000390000061402000041000000000021043500000024015000390000000802000039000000000021043500000615010000410000000000150435000000040150003900000020020000390000000000210435000005ff01000041000005ff0250009c0000000001054019000000400110021000000616011001c7000017f90001043017f716020000040f000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000006080330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d00000000023200490000060703000041000002600420008c000000000400001900000000040340190000060702200197000000000502004b000000000300a019000006070220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017f9000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d000000000100041200000609011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d00000020031000390000062f0400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006300310009c0000015e0000413d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f900010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b0000060708000041000000000975004b000000000900001900000000090880190000060707700197000006070a500197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000006080160009c0000010d0000213d000000000162004900000020025000390000060705000041000000000712004b0000000007000019000000000705201900000607011001970000060708200197000000000918004b0000000005008019000000000118013f000006070110009c00000000010700190000000001056019000000000101004b0000010d0000c13d00000000010004140000060b0510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f00000000040104330000060b0540009c000001740000413d00000615020000410000000000230435000000a40210003900000614040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005ff01000041000005ff0230009c0000000001034019000000400110021000000616011001c7000017f900010430000000c0022002100000061102200197000000400110021000000631011000410000063201100197000000000112019f00000060024002100000063302200197000000000121019f00000634011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917f717e30000040f00030000000103550000006001100270000105ff0010019d000005ff041001970000003f014000390000063505100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000006080630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012a20000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002a30000c13d0000000702000029000000000121034f000000000101043b000000800210008c0000031e0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000090200002900000021022000390000000000120435000004760000013d000000000221034f000000000202043b0000060c02200197000006170720009c0000026e0000c13d000000430260008c000002850000213d0000061501000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062a01000041000000c40010043f0000062b01000041000000e40010043f0000062c01000041000017f9000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060c088001970000060d0980009c0000024a0000613d0000060e0980009c0000024a0000613d0000060f0980009c0000024a0000613d000006100580009c00000000050000190000000105006039000000010550018f0000000008260019000005ff02200197000000000227034f000000000703004b0000027a0000c13d000000000368004b0000027f0000413d0000000003000031000000000683004b0000027f0000413d00000612060000410000061307000041000000000505004b00000000050600190000000005076019000000c0011002100000061101100197000000000115019f0000000003830049000005ff0330019700000000023203df00000000011203af000000000204001917f717ed0000040f000002fc0000013d0000000001010433000005ff02000041000005ff0410009c0000000001028019000005ff0430009c000000000203401900000040022002100000006001100210000000000121019f000017f900010430000006180120009c000000430000613d0000061501000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000061901000041000000c40010043f0000061a01000041000017f900010430000000000668004b0000027f0000413d0000000006000031000000000786004b000002f20000813d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f9000104300000002402500039000000000221034f000000000202043b000b00000002001d000006090220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061b02000041000000800020043f0000060902400197000800000002001d000000840020043f0000060901100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c000003970000c13d0000000103000031000000200130008c00000020040000390000000004034019000003c30000013d000000710320008c0000033b0000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d00000000044200190000060705000041000000000643004b0000000006000019000000000605801900000607044001970000060707300197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000006080410009c0000010d0000213d000000000212004900000020033000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d00000000020004140000000004310019000000000114004b00000000010000190000000101004039000005ff0330019700000001011001900000027f0000c13d0000000001000031000000000541004b0000027f0000413d00000002033003670000060b0520009c000007da0000413d000000400100043d00000044021000390000061403000041000000000032043500000024021000390000000803000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f9000104300000000006860049000005ff0660019700000000026203df000000c001100210000006110110019700000612011001c700000000011203af0000800902000039000000000600001917f717ed0000040f000300000001035500000000030100190000006003300270000105ff0030019d000005ff033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000030e0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003070000413d000000000504004b0000031c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400200043d000900000002001d000006390220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000032a0000413d00000009030000290000000003030433000000000303004b0000046d0000c13d0000064b0100004100000000001004350000003201000039000000040010043f0000064c01000041000017f900010430000000020120008c000003eb0000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005b10000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000003840000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000037c0000413d000000000500004b000003860000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005ce0000013d000005ff02000041000005ff0310009c0000000001028019000000c0011002100000061c011001c70000000b0200002917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b00000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003a80000413d000000000705004b000003bf0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004470000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a0024000390000061d030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061e03000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c000005470000c13d00000001020000390000000101000031000005580000013d000000010120008c000004c70000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006430000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004340000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000042c0000413d000000000500004b000004360000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006600000013d000000400200043d0000001f0430018f0000000503300272000004540000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000044c0000413d000000000504004b000004630000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004d90000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004b40000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004ac0000413d000000000500004b000004b60000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004f60000013d000000400100043d00000044021000390000063603000041000000000032043500000024021000390000001703000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004e30000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006b00000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000005340000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000052c0000413d000000000600004b000005360000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006cd0000013d000005ff04000041000005ff0530009c000000000304801900000060033002100000004002200210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000700000003001d000000000301004b000005810000c13d00000007010000290000000031010434000200000003001d000000000202004b0000061e0000c13d000000000201004b000007610000c13d000000400400043d000b00000004001d0000061501000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005a10000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b000005990000413d000000000604004b0000055c0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000055c0000013d000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005bb0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c0000076c0000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000060b0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006030000413d000000000600004b0000060d0000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000007890000013d000000000201004b00000a360000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a320000c13d000000400100043d00000044021000390000062903000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000064d0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009c40000413d00000080032002700000063b0420009c000000000302a0190000063b0420009c0000000004000019000000100400203900000008054001bf000006080630009c00000000040520190000004005300270000006080630009c000000000305201900000004054001bf000005ff0630009c00000000040520190000002005300270000005ff0630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005530436000000210640003900000005066002720000069d0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006950000413d000000000600004b0000069f0000613d0000000006030433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009e10000013d000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006ba0000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006db0000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006d40000413d000000000143001900000000000104350000000004020433000000000504004b000006e80000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006e10000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000006080220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f000006390110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f00000020025000390000063d0300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bd20000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000005040000290000000003340436000000210420003900000005044002720000074c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007440000413d000000000400004b0000074e0000613d00000005040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000bf20000013d000005ff020000410000000204000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000007760000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a730000413d00000080043002700000063b0530009c000000000403a0190000063b0530009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007c70000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007bf0000413d000000000700004b000007c90000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a900000013d0000000001410049000005ff0110019700000000011303df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff033001970003000000010355000000010220019000000ae10000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008050000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007fd0000413d000000000400004b000008070000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008170000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b0000080f0000413d000000000604004b000008260000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b0000060706000041000000000753004b0000000007000019000000000706801900000607055001970000060708300197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000006080350009c0000010d0000213d0000000503500210000000000434004900000020061000390000060701000041000000000746004b0000000007000019000000000701201900000607044001970000060708600197000000000948004b0000000001008019000000000448013f000006070440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d00000020041000390000064205500198000008650000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b0000085d0000413d000000000200004b000008670000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000006080520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005ff02000041000005ff0340009c0000000003020019000000000304401900000040033002100000000001010433000005ff0410009c00000000010280190000006001100210000000000131019f0000000003000414000005ff0430009c0000000002034019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b0000060706000041000000000754004b0000000007000019000000000706801900000607055001970000060708400197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000006080310009c0000010d0000213d000000000212004900000020034000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005ff043001970000027f0000413d0000000003000031000000000513004b0000027f0000413d0000000204400367000005ff0520009c000002e00000213d0000000001130049000005ff0110019700000000011403df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff0330019700030000000103550000000102200190000014500000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008eb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008e30000413d000000000400004b000008ed0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008fd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008f50000413d000000000604004b0000090c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000644030000410000000000320435000001c0030000390000000000310435000006450310009c0000012b0000213d000001e003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b000006460300004100000000003204350000008003400039000000000013043500000060014000390000064703000041000000000031043500000040014000390000064803000041000000000031043500000080010000390000000000140435000006490140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005ff01000041000005ff0320009c000000000201801900000040022002100000000003040433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064a0400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000006250310009c0000012b0000213d0000008003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400300043d000006390430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009ce0000413d0000000005030433000000000505004b000003350000613d000000f8052002100000060706000041000000000202004b0000000002050019000000000206601900000000050404330000063a05500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b640000413d00000080042002700000063b0520009c000000000402a0190000063b0520009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a1f0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a170000413d000000000700004b00000a210000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b810000013d00000007010000290000000001010433000000000201004b00000a600000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a600000c13d000000400100043d00000064021000390000062703000041000000000032043500000044021000390000062803000041000000000032043500000024021000390000002a03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400300043d0000002401300039000000090200002900000000002104350000061b010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000afc0000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b2f0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a7d0000413d0000000006040433000000000606004b000003350000613d000000f8063002100000060707000041000000000303004b0000000003060019000000000307601900000000060504330000063a06600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c670000413d00000080053002700000063b0630009c000000000503a0190000063b0630009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ace0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000ac60000413d000000000800004b00000ad00000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c840000013d0000001f0430018f000000050230027200000aec0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ae50000413d000000000504004b00000afa0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000005ff02000041000005ff0310009c00000000010280190000000704000029000005ff0340009c00000000020440190000004002200210000000c001100210000000000121019f00000621011001c70000000b0200002917f717e80000040f000000070a00002900000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b1b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b130000413d000000000705004b00000b2b0000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c410000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000006080410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000cd50000c13d00000044021000390000000a03000029000000000032043500000020021000390000061d03000041000000000032043500000024031000390000000904000029000000000043043500000003030000290000000000310435000006250310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f000006260310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061e03000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000df70000c13d0000000102000039000000010100003100000e0a0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b6e0000413d0000000006040433000000000606004b000003350000613d000000f8062002100000060707000041000000000202004b0000000002060019000000000207601900000000060504330000063a06600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cfb0000413d00000080052002700000063b0620009c000000000502a0190000063b0620009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bbf0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bb70000413d000000000800004b00000bc10000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d180000013d000000400200043d000500000002001d000006390220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bde0000413d00000005030000290000000003030433000000000303004b000003350000613d000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d00000000044300190000060705000041000000000641004b0000000006000019000000000605801900000607044001970000060707100197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000006080510009c0000010d0000213d000000000513004900000020034000390000060704000041000000000653004b0000000006000019000000000604201900000607055001970000060707300197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f320000c13d000000000132034f000000000101043b000000010200008a0000060703000041000000000221004b000000000200001900000000020320190000060701100197000006070410009c00000000030080190000060701100167000006070110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010900000c13d000000400100043d000400000001001d000006390110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063c02000041000000000021043500000001010000390000000000130435000010900000013d000000400200043d0000001f0430018f000000050330027200000c4e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c460000413d000000000504004b00000c5d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c710000413d0000000007050433000000000707004b000003350000613d000000f8073002100000060708000041000000000303004b0000000003070019000000000308601900000000070604330000063a07700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d790000413d00000080063002700000063b0730009c000000000603a0190000063b0730009c0000000007000019000000100700203900000008087001bf000006080960009c00000000070820190000004008600270000006080960009c000000000608201900000004087001bf000005ff0960009c00000000070820190000002008600270000005ff0960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000006080a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cc20000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cba0000413d000000000900004b00000cc40000613d0000000009060433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063c0990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d960000013d00000064021000390000062203000041000000000032043500000044021000390000062303000041000000000032043500000024021000390000003603000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001f03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000d050000413d0000000007050433000000000707004b000003350000613d000000f8072002100000060708000041000000000202004b0000000002070019000000000208601900000000070604330000063a07700197000000000227019f0000000000260435000000400600043d000006390260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f00000020076000390000063d0800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e630000413d00000080072002700000063b0820009c000000000702a0190000063b0820009c0000000008000019000000100800203900000008098001bf000006080a70009c00000000080920190000004009700270000006080a70009c000000000709201900000004098001bf000005ff0a70009c00000000080920190000002009700270000005ff0a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000006080b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d660000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d5e0000413d000000000a00004b00000d680000613d000000000a070433000000000a0a004b000003350000613d000000000a0904330000063a0aa00197000000f80b800210000000000aab019f0000063c0aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e800000013d000000400600043d000006390760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d830000413d0000000008060433000000000808004b000003350000613d000000f8083002100000060709000041000000000303004b0000000003080019000000000309601900000000080704330000063a08800197000000000338019f0000000000370435000000400700043d000006390370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f00000020087000390000063d090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f950000413d00000080083002700000063b0930009c000000000803a0190000063b0930009c00000000090000190000001009002039000000080a9001bf000006080b80009c00000000090a2019000000400a800270000006080b80009c00000000080a2019000000040a9001bf000005ff0b80009c00000000090a2019000000200a800270000005ff0b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000006080ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000de40000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000ddc0000413d000000000b00004b00000de60000613d000000000b080433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c900210000000000bbc019f0000063c0bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fb20000013d000005ff04000041000005ff0520009c00000000020480190000004002200210000005ff0530009c00000000030480190000006003300210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000900000003001d000000000301004b00000e330000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f680000c13d000000000201004b0000115f0000c13d000000400400043d000b00000004001d000006150100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e530000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e4b0000413d000000000604004b00000e0e0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e0e0000013d000000400700043d000006390870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e6d0000413d0000000009070433000000000909004b000003350000613d000000f809200210000006070a000041000000000202004b000000000209001900000000020a601900000000090804330000063a09900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e8d0000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e860000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e9c0000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e950000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000eab0000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000ea40000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eba0000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000eb30000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ec90000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000ec20000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ed80000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ed10000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000006080450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012c60000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013440000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013440000013d000000380210008c000010730000413d0000002002100270000005ff0310009c00000000030100190000000003022019000005ff0210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000006390440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f500000413d00000004040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063e044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010900000013d000000000201004b00000f7f0000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006310000613d00000009010000290000000001010433000000000201004b000000430000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a4b0000613d000000430000013d000000400800043d000006390980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f9f0000413d000000000a080433000000000a0a004b000003350000613d000000f80a300210000006070b000041000000000303004b00000000030a001900000000030b6019000000000a0904330000063a0aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fbf0000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fb80000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fce0000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fc70000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fdd0000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fd60000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fec0000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fe50000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ffb0000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000ff40000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b0000100a0000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b000010030000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b000010190000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010120000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000006080450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012f80000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013d70000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013d70000013d000000400200043d000400000002001d000006390220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000107f0000413d00000004030000290000000003030433000000000303004b000003350000613d000000f80110021000000000030204330000063a03300197000000000113019f0000060701100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000011050000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b0000060704000041000000000659004b0000000006000019000000000604801900000607055001970000060707900197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000006080a20009c0000010d0000213d00000000032300490000002009900039000006070a000041000000000b39004b000000000b000019000000000b0a201900000607033001970000060709900197000000000c39004b000000000a008019000000000339013f000006070330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000060802200197000000380320008c000011a70000413d0000002003200270000005ff0420009c00000000040200190000000004032019000005ff0320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d000006390560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010ef0000413d0000000005060433000000000505004b000003350000613d00000000050404330000063a05500197000000f807300210000000000557019f00000640055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011c10000013d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000800210008c0000116a0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004420436000000210530003900000005055002720000114c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000011440000413d000000000500004b0000114e0000613d0000000005020433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c000000000100201900000021032000390000000000130435000011870000013d000005ff020000410000000704000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000011740000413d0000000004020433000000000404004b000003350000613d000000f8041002100000060705000041000000000101004b0000000001040019000000000105601900000000040304330000063a04400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b000011940000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b0000118d0000413d00000000024300190000064d0400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000006080420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f0000000202000367000010980000013d000000400600043d000006390360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011b10000413d0000000004060433000000000404004b000003350000613d000000f80220021000000000040304330000063a04400197000000000242019f0000063f02200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b0000060707000041000000000854004b0000000008000019000000000807801900000607055001970000060709400197000000000a59004b0000000007008019000000000559013f000006070550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000006080340009c0000010d0000213d000000000242004900000020055000390000060703000041000000000725004b0000000007000019000000000703201900000607022001970000060708500197000000000928004b0000000003008019000000000228013f000006070220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011f90000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011f20000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b0000120a0000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012020000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b0000121b0000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012130000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b0000122c0000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012240000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b0000123d0000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012350000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b0000124e0000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012460000413d0000000008870019000000000008043500000000066700190000001f0740018f0000002008600039000000020550036700000005094002720000125f0000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000012570000413d000000000a07004b0000126e0000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b0000127c0000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b000012750000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005ff01000041000005ff0430009c000000000301801900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000a0100002917f717c10000040f0000064e02000041000000000020043900000008020000290000000400200443000800000001001d0000800a01000039000000240200003917f715f10000040f0000000802000029000000000112004b0000000001000019000000010100a03917f7167d0000040f0000000b01000029000001e4021000390000000a0100002917f716950000040f000000000300003117f716c10000040f0000000002010019000000090100002917f716fc0000040f0000064f02000041000000000101004b00000000010200190000000001006019000000400200043d0000000000120435000005ff01000041000005ff0320009c0000000001024019000000400110021000000650011001c7000017f80001042e000000380760008c0000132a0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000012e10000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013440000013d000000380760008c000013bd0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013130000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013d70000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013330000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000134e0000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000146b0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000013a70000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000014840000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013c60000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013e10000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000152e0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000143a0000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015470000013d0000001f0430018f00000005023002720000145b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014540000413d000000000504004b000014690000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000014740000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000006070a000041000000000b83004b000000000b000019000000000b0a80190000060708800197000006070c300197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020093000390000060703000041000000000a49004b000000000a000019000000000a0320190000060704400197000006070b900197000000000c4b004b000000000300801900000000044b013f000006070440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d0000002004300039000006340a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000014bc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000014b50000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000014cb0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000014c40000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b000014da0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000014d30000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a800272000014eb0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000014e30000413d000000000b06004b000014fa0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000015080000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015010000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000006080510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005ff01000041000005ff0240009c0000000002010019000000000204401900000040022002100000000003030433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015370000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000006070a000041000000000b82004b000000000b000019000000000b0a80190000060708800197000006070c200197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020092000390000060702000041000000000a49004b000000000a000019000000000a0220190000060704400197000006070b900197000000000c4b004b000000000200801900000000044b013f000006070440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006410a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b0000157f0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015780000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b0000158e0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000015870000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b0000159d0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000015960000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000015ae0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000015a60000413d000000000b06004b000015bd0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000015cb0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015c40000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000006080510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005ff01000041000005ff0340009c0000000003010019000000000304401900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d0000000003010019000005ff010000410000000004000414000005ff0540009c0000000001044019000000c001100210000000600220021000000000011200190000065101100041000000000203001917f717e80000040f0000000102200190000016000000613d000000000101043b000000000001042d0000000001000019000017f9000104300003000000000002000000040100008a000000000310003100000607010000410000005f0230008c000000000200001900000000020120190000060704300197000000000504004b0000000001008019000006070440009c000000000102c019000000000101004b000016480000613d00000002010003670000004402100370000000000202043b000006080420009c000016480000213d00000000032300490000060704000041000002600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b000016480000c13d0000000003000411000080010330008c000016460000c13d000000000300041200000609033001970000000004000410000000000343004b000016460000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000164a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005ff02000041000005ff0310009c0000000001028019000000c001100210000080010200003917f717e30000040f000000010300002900030000000103550000006001100270000105ff0010019d000000200130011a00000001012001950000000101200190000016620000613d0000000001000019000017f80001042e0000000001000019000017f90001043000000000431200a900000000422300d9000000000112004b000016770000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000016370000613d000005ff02000041000005ff0410009c0000000001028019000000c00110021000000641011001c700008009020000390000800104000039000000000500001917f717e30000040f0000000003000415000000020330008a00000020033000c90000163f0000013d000000400100043d00000064021000390000065203000041000000000032043500000044021000390000065303000041000000000032043500000024021000390000002503000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f9000104300000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000000000101004b000016800000613d000000000001042d000000400100043d00000064021000390000065403000041000000000032043500000044021000390000065503000041000000000032043500000024021000390000002203000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000000300003100000000041300490000001f0540008a0000000204000367000000000224034f000000000202043b0000060706000041000000000752004b0000000007000019000000000706401900000607055001970000060708200197000000000958004b000000000600a019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b000016bf0000613d0000000001120019000000000214034f000000000202043b000006080420009c000016bf0000213d000000000323004900000020011000390000060704000041000000000531004b0000000005000019000000000504201900000607033001970000060706100197000000000736004b0000000004008019000000000336013f000006070330009c00000000030500190000000003046019000000000303004b000016bf0000c13d000000000001042d0000000001000019000017f9000104300000000004010019000006560120009c000016f40000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000006080750009c000016f40000213d0000000106600190000016f40000c13d000000400050043f00000000052104360000000006420019000000000336004b000016fa0000213d0000001f0320018f00000002044003670000000506200272000016e20000613d000000000700001900000005087002100000000009850019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000016da0000413d000000000703004b000016f10000613d0000000506600210000000000464034f00000000066500190000000303300210000000000706043300000000073701cf000000000737022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000373019f000000000036043500000000022500190000000000020435000000000001042d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f9000104300000000001000019000017f9000104300000000043020434000000410330008c0000174f0000c13d00000041032000390000000003030433000000ff0330018f0000001d0530008a000000030600008a000000000565004b000017610000a13d000000400220003900000000050204330000000004040433000000400200043d000006580650009c000017730000813d00000060062000390000000000560435000000400520003900000000004504350000002004200039000000000034043500000000001204350000000000000435000005ff010000410000000003000414000005ff0430009c0000000003018019000005ff0420009c00000000010240190000004001100210000000c002300210000000000112019f00000659011001c7000000010200003917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000017310000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b0000172a0000413d000000000605004b0000173f0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000017840000613d000000000100043300000609011001970000000002000410000000000221004b00000000020000190000000102006039000000000101004b0000000001000019000000010100c039000000000112016f000000010110018f000000000001042d000000400100043d00000044021000390000065703000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d00000044021000390000065b03000041000000000032043500000024021000390000001603000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f90001043000000044012000390000065a03000041000000000031043500000024012000390000000903000039000000000031043500000615010000410000000000120435000000040120003900000020030000390000000000310435000005ff01000041000005ff0320009c0000000001024019000000400110021000000616011001c7000017f900010430000000400200043d0000001f0430018f0000000503300272000017910000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000017890000413d000000000504004b000017a00000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f9000104300000000001000411000080010110008c000017ae0000613d000000000001042d0000064b0100004100000000001004350000000101000039000000040010043f0000064c01000041000017f900010430000000000403004b000017be0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b70000413d00000000012300190000000000010435000000000001042d000000e0031000390000000202000367000000000332034f000000000303043b0000060903300198000017cb0000613d0000012001100039000000000112034f000000000101043b000017dc0000013d000000a003100039000000000332034f0000006004100039000000000442034f000000000404043b000000000503043b00000000634500a9000000000605004b000017d70000613d00000000655300d9000000000445004b000017dd0000c13d0000012001100039000000000112034f000000000101043b000000000131001a000017dd0000413d000000000001042d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000017e6002104210000000102000039000000000001042d0000000002000019000000000001042d000017eb002104230000000102000039000000000001042d0000000002000019000000000001042d000017f0002104210000000102000039000000000001042d0000000002000019000000000001042d000017f5002104230000000102000039000000000001042d0000000002000019000000000001042d000017f700000432000017f80001042e000017f9000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f19010000000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39202bcce700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000002000002000000000000000000000000000000000000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f706575650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c00000000000000000000000000000000000000000000000100000000000000005369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f72203238000000000000000000006a1bd7e3ec749c513a118c441484f53b26b29841d2cab7a6b59c99038c788885", + "bytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005f50430019700030000004103550002000000010355000005f50030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000005f70430009c000000450000a13d000005f80430009c000000a90000613d000005f90430009c000000ea0000613d000005fa0330009c000000a60000c13d000000040220008a000005fd03000041000000200420008c00000000040000190000000004034019000005fd05200197000000000605004b000000000300a019000005fd0550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000005fe0310009c0000010d0000213d0000000001120049000005fd02000041000002600310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d000000200100003900000100001004430000012000000443000005f601000041000017d00001042e000000000102004b000000a60000c13d0000000001000019000017d00001042e000005fb0430009c000000eb0000613d000005fc0330009c000000a60000c13d000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000005fe0430009c0000010d0000213d00000004053000390000000004520049000005fd06000041000002600740008c00000000070000190000000007064019000005fd04400197000000000804004b000000000600a019000005fd0440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d0000000004000412000005ff064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b000005fd08000041000000000976004b00000000090000190000000009088019000005fd07700197000005fd0a600197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000005fe0760009c0000010d0000213d00000000076200490000002002500039000005fd08000041000000000972004b00000000090000190000000009082019000005fd07700197000005fd0a200197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062301000041000000c40010043f0000062401000041000000e40010043f0000062201000041000017d10001043017cf179d0000040f0000000001000019000017d00001042e000000040320008a000005fd04000041000000600630008c00000000060000190000000006044019000005fd03300197000000000703004b000000000400a019000005fd0330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000005fe0370009c0000010d0000213d00000004067000390000000003620049000005fd04000041000002600830008c00000000080000190000000008044019000005fd03300197000000000903004b000000000400a019000005fd0330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d0000000003000412000005ff033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b000005ff04400197000000000303043b000006000830009c000001310000413d00000044015000390000060a0200004100000000002104350000002401500039000000080200003900000000002104350000060b010000410000000000150435000000040150003900000020020000390000000000210435000005f501000041000005f50250009c000000000105401900000040011002100000060c011001c7000017d10001043017cf17220000040f000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000005fe0330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d0000000002320049000005fd03000041000002600420008c00000000040000190000000004034019000005fd02200197000000000502004b000000000300a019000005fd0220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017d1000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d0000000001000412000005ff011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d0000002003100039000006250400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006260310009c0000015e0000413d0000064c0100004100000000001004350000004101000039000000040010043f0000064d01000041000017d100010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b000005fd08000041000000000975004b00000000090000190000000009088019000005fd07700197000005fd0a500197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000005fe0160009c0000010d0000213d00000000016200490000002002500039000005fd05000041000000000712004b00000000070000190000000007052019000005fd01100197000005fd08200197000000000918004b0000000005008019000000000118013f000005fd0110009c00000000010700190000000001056019000000000101004b0000010d0000c13d0000000001000414000006010510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f0000000004010433000006010540009c000001740000413d0000060b020000410000000000230435000000a4021000390000060a040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005f501000041000005f50230009c000000000103401900000040011002100000060c011001c7000017d100010430000000c0022002100000060702200197000000400110021000000627011000410000062801100197000000000112019f00000060024002100000062902200197000000000121019f0000062a011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917cf17bb0000040f00030000000103550000006001100270000105f50010019d000005f5041001970000003f014000390000062b05100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000005fe0630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012980000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002c90000c13d0000000702000029000000000121034f000000000101043b000000800210008c000003140000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000902000029000000210220003900000000001204350000046c0000013d000000000221034f000000000202043b00000602022001970000060d0720009c0000026e0000c13d000000430260008c000002ab0000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062001000041000000c40010043f0000062101000041000000e40010043f0000062201000041000017d1000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060208800197000006030980009c0000024a0000613d000006040980009c0000024a0000613d000006050980009c0000024a0000613d000006060580009c00000000050000190000000105006039000000010550018f0000000008260019000005f502200197000000000227034f000000000703004b0000027a0000c13d000000000368004b000012b40000413d0000000003000031000000000683004b000012b40000413d00000608060000410000060907000041000000000505004b00000000050600190000000005076019000000c0011002100000060701100197000000000115019f0000000003830049000005f50330019700000000023203df00000000011203af000000000204001917cf17c50000040f000002890000013d0000000001010433000005f502000041000005f50410009c0000000001028019000005f50430009c000000000203401900000040022002100000006001100210000000000121019f000017d1000104300000060e0120009c000000430000613d0000060b01000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000060f01000041000000c40010043f0000061001000041000017d100010430000000000668004b000012b40000413d0000000006000031000000000786004b000012b40000413d0000000006860049000005f50660019700000000026203df000000c001100210000006070110019700000608011001c700000000011203af0000800902000039000000000600001917cf17c50000040f000300000001035500000000030100190000006003300270000105f50030019d000005f5033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000029b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000002940000413d000000000504004b000002a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d1000104300000002402500039000000000221034f000000000202043b000b00000002001d000005ff0220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061102000041000000800020043f000005ff02400197000800000002001d000000840020043f000005ff01100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c0000038d0000c13d0000000103000031000000200130008c00000020040000390000000004034019000003b90000013d000000710320008c000003310000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d0000000004420019000005fd05000041000000000643004b00000000060000190000000006058019000005fd04400197000005fd07300197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000005fe0410009c0000010d0000213d00000000021200490000002003300039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000006010520009c000007d00000413d000000400100043d00000044021000390000060a0300004100000000003204350000002402100039000000080300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400200043d000900000002001d0000062f0220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000003200000413d00000009030000290000000003030433000000000303004b000004630000c13d0000064c0100004100000000001004350000003201000039000000040010043f0000064d01000041000017d100010430000000020120008c000003e10000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005a70000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000037a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000003720000413d000000000500004b0000037c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005c40000013d000005f502000041000005f50310009c0000000001028019000000c00110021000000612011001c70000000b0200002917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003a60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000039e0000413d000000000705004b000003b50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000043d0000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a00240003900000613030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061403000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c0000053d0000c13d000000010200003900000001010000310000054e0000013d000000010120008c000004bd0000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006390000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000042a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004220000413d000000000500004b0000042c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006560000013d000000400200043d0000001f0430018f00000005033002720000044a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004420000413d000000000504004b000004590000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004cf0000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004aa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004a20000413d000000000500004b000004ac0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004ec0000013d000000400100043d00000044021000390000062c0300004100000000003204350000002402100039000000170300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004d90000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006a60000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000052a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005220000413d000000000600004b0000052c0000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006c30000013d000005f504000041000005f50530009c000000000304801900000060033002100000004002200210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000700000003001d000000000301004b000005770000c13d00000007010000290000000031010434000200000003001d000000000202004b000006140000c13d000000000201004b000007570000c13d000000400400043d000b00000004001d0000060b01000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000058f0000413d000000000604004b000005520000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000005520000013d000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005b10000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c000007620000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000006010000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005f90000413d000000000600004b000006030000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000077f0000013d000000000201004b00000a2c0000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a280000c13d000000400100043d00000044021000390000061f03000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000006430000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009ba0000413d0000008003200270000006310420009c000000000302a019000006310420009c0000000004000019000000100400203900000008054001bf000005fe0630009c00000000040520190000004005300270000005fe0630009c000000000305201900000004054001bf000005f50630009c00000000040520190000002005300270000005f50630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000006930000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000068b0000413d000000000600004b000006950000613d0000000006030433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009d70000013d000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006b00000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006d10000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006ca0000413d000000000143001900000000000104350000000004020433000000000504004b000006de0000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006d70000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000005fe0220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f0000062f0110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f0000002002500039000006330300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bc80000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000002032000390000000504000029000000000334043600000021042000390000000504400272000007420000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000073a0000413d000000000400004b000007440000613d00000005040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000be80000013d000005f5020000410000000204000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000076c0000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a690000413d0000008004300270000006310530009c000000000403a019000006310530009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007bd0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007b50000413d000000000700004b000007bf0000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a860000013d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f5033001970003000000010355000000010220019000000ad70000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000007fb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007f30000413d000000000400004b000007fd0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f00000005033002720000080d0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008050000413d000000000604004b0000081c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b000005fd06000041000000000753004b00000000070000190000000007068019000005fd05500197000005fd08300197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000005fe0350009c0000010d0000213d000000050350021000000000043400490000002006100039000005fd01000041000000000746004b00000000070000190000000007012019000005fd04400197000005fd08600197000000000948004b0000000001008019000000000448013f000005fd0440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d000000200410003900000638055001980000085b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000008530000413d000000000200004b0000085d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000005fe0520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005f502000041000005f50340009c0000000003020019000000000304401900000040033002100000000001010433000005f50410009c00000000010280190000006001100210000000000131019f0000000003000414000005f50430009c0000000002034019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b000005fd06000041000000000754004b00000000070000190000000007068019000005fd05500197000005fd08400197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000005fe0310009c0000010d0000213d00000000021200490000002003400039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000005f50520009c000003020000213d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f50330019700030000000103550000000102200190000015810000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008e10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008d90000413d000000000400004b000008e30000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008f30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008eb0000413d000000000604004b000009020000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a006100039000000000056043500000080051000390000000000450435000000600410003900000000003404350000004003100039000000000023043500000020021000390000063a030000410000000000320435000001c00300003900000000003104350000063b0310009c0000012b0000213d000001e003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b0000063c0300004100000000003204350000008003400039000000000013043500000060014000390000063d03000041000000000031043500000040014000390000063e030000410000000000310435000000800100003900000000001404350000063f0140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005f501000041000005f50320009c000000000201801900000040022002100000000003040433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064004000041000000000042043500000022041000390000000000340435000000420300003900000000003104350000061b0310009c0000012b0000213d0000008003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400300043d0000062f0430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009c40000413d0000000005030433000000000505004b0000032b0000613d000000f805200210000005fd06000041000000000202004b0000000002050019000000000206601900000000050404330000063005500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b5a0000413d0000008004200270000006310520009c000000000402a019000006310520009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a150000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a0d0000413d000000000700004b00000a170000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b770000013d00000007010000290000000001010433000000000201004b00000a560000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a560000c13d000000400100043d00000064021000390000061d03000041000000000032043500000044021000390000061e03000041000000000032043500000024021000390000002a0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400300043d00000024013000390000000902000029000000000021043500000611010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000af20000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b250000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a730000413d0000000006040433000000000606004b0000032b0000613d000000f806300210000005fd07000041000000000303004b0000000003060019000000000307601900000000060504330000063006600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c5d0000413d0000008005300270000006310630009c000000000503a019000006310630009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ac40000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000abc0000413d000000000800004b00000ac60000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c7a0000013d0000001f0430018f000000050230027200000ae20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000adb0000413d000000000504004b00000af00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000005f502000041000005f50310009c00000000010280190000000704000029000005f50340009c00000000020440190000004002200210000000c001100210000000000121019f00000617011001c70000000b0200002917cf17c00000040f000000070a00002900000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b110000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b090000413d000000000705004b00000b210000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c370000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000005fe0410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000ccb0000c13d00000044021000390000000a030000290000000000320435000000200210003900000613030000410000000000320435000000240310003900000009040000290000000000430435000000030300002900000000003104350000061b0310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f0000061c0310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061403000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000ded0000c13d0000000102000039000000010100003100000e000000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b640000413d0000000006040433000000000606004b0000032b0000613d000000f806200210000005fd07000041000000000202004b0000000002060019000000000207601900000000060504330000063006600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cf10000413d0000008005200270000006310620009c000000000502a019000006310620009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bb50000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bad0000413d000000000800004b00000bb70000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d0e0000013d000000400200043d000500000002001d0000062f0220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bd40000413d00000005030000290000000003030433000000000303004b0000032b0000613d000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d0000000004430019000005fd05000041000000000641004b00000000060000190000000006058019000005fd04400197000005fd07100197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000005fe0510009c0000010d0000213d00000000051300490000002003400039000005fd04000041000000000653004b00000000060000190000000006042019000005fd05500197000005fd07300197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f280000c13d000000000132034f000000000101043b000000010200008a000005fd03000041000000000221004b00000000020000190000000002032019000005fd01100197000005fd0410009c0000000003008019000005fd01100167000005fd0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010860000c13d000000400100043d000400000001001d0000062f0110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063202000041000000000021043500000001010000390000000000130435000010860000013d000000400200043d0000001f0430018f000000050330027200000c440000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c3c0000413d000000000504004b00000c530000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c670000413d0000000007050433000000000707004b0000032b0000613d000000f807300210000005fd08000041000000000303004b0000000003070019000000000308601900000000070604330000063007700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d6f0000413d0000008006300270000006310730009c000000000603a019000006310730009c0000000007000019000000100700203900000008087001bf000005fe0960009c00000000070820190000004008600270000005fe0960009c000000000608201900000004087001bf000005f50960009c00000000070820190000002008600270000005f50960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000005fe0a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cb80000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cb00000413d000000000900004b00000cba0000613d0000000009060433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f000006320990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d8c0000013d0000006402100039000006180300004100000000003204350000004402100039000006190300004100000000003204350000002402100039000000360300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400100043d00000044021000390000063903000041000000000032043500000024021000390000001f0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000cfb0000413d0000000007050433000000000707004b0000032b0000613d000000f807200210000005fd08000041000000000202004b0000000002070019000000000208601900000000070604330000063007700197000000000227019f0000000000260435000000400600043d0000062f0260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000006330800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e590000413d0000008007200270000006310820009c000000000702a019000006310820009c0000000008000019000000100800203900000008098001bf000005fe0a70009c00000000080920190000004009700270000005fe0a70009c000000000709201900000004098001bf000005f50a70009c00000000080920190000002009700270000005f50a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000005fe0b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d5c0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d540000413d000000000a00004b00000d5e0000613d000000000a070433000000000a0a004b0000032b0000613d000000000a090433000006300aa00197000000f80b800210000000000aab019f000006320aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e760000013d000000400600043d0000062f0760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d790000413d0000000008060433000000000808004b0000032b0000613d000000f808300210000005fd09000041000000000303004b0000000003080019000000000309601900000000080704330000063008800197000000000338019f0000000000370435000000400700043d0000062f0370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000633090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f8b0000413d0000008008300270000006310930009c000000000803a019000006310930009c00000000090000190000001009002039000000080a9001bf000005fe0b80009c00000000090a2019000000400a800270000005fe0b80009c00000000080a2019000000040a9001bf000005f50b80009c00000000090a2019000000200a800270000005f50b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000005fe0ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000dda0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000dd20000413d000000000b00004b00000ddc0000613d000000000b080433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c900210000000000bbc019f000006320bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fa80000013d000005f504000041000005f50520009c00000000020480190000004002200210000005f50530009c00000000030480190000006003300210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000900000003001d000000000301004b00000e290000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f5e0000c13d000000000201004b000011550000c13d000000400400043d000b00000004001d0000060b0100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e490000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e410000413d000000000604004b00000e040000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e040000013d000000400700043d0000062f0870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e630000413d0000000009070433000000000909004b0000032b0000613d000000f809200210000005fd0a000041000000000202004b000000000209001900000000020a601900000000090804330000063009900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e830000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e7c0000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e920000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e8b0000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000ea10000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000e9a0000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eb00000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000ea90000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ebf0000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000eb80000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ece0000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ec70000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000005fe0450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000013f70000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000014750000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000014750000013d000000380210008c000010690000413d0000002002100270000005f50310009c00000000030100190000000003022019000005f50210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d0000062f0440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f460000413d00000004040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f00000634044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010860000013d000000000201004b00000f750000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006270000613d00000009010000290000000001010433000000000201004b000000430000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a410000613d000000430000013d000000400800043d0000062f0980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f950000413d000000000a080433000000000a0a004b0000032b0000613d000000f80a300210000005fd0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000006300aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fb50000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fae0000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fc40000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fbd0000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fd30000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fcc0000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fe20000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fdb0000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ff10000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000fea0000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b000010000000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b00000ff90000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b0000100f0000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010080000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000005fe0450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000014290000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000015080000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000015080000013d000000400200043d000400000002001d0000062f0220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000010750000413d00000004030000290000000003030433000000000303004b0000032b0000613d000000f80110021000000000030204330000063003300197000000000113019f000005fd01100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000010fb0000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b000005fd04000041000000000659004b00000000060000190000000006048019000005fd05500197000005fd07900197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000005fe0a20009c0000010d0000213d00000000032300490000002009900039000005fd0a000041000000000b39004b000000000b000019000000000b0a2019000005fd03300197000005fd09900197000000000c39004b000000000a008019000000000339013f000005fd0330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d0000000003450019000000000363001900000000037300190000000003830019000000000223001900000000030104330000000002320019000005fe02200197000000380320008c0000119d0000413d0000002003200270000005f50420009c00000000040200190000000004032019000005f50320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d0000062f0560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010e50000413d0000000005060433000000000505004b0000032b0000613d00000000050404330000063005500197000000f807300210000000000557019f00000636055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011b70000013d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000800210008c000011600000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000442043600000021053000390000000505500272000011420000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000113a0000413d000000000500004b000011440000613d0000000005020433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c0000000001002019000000210320003900000000001304350000117d0000013d000005f5020000410000000704000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000116a0000413d0000000004020433000000000404004b0000032b0000613d000000f804100210000005fd05000041000000000101004b0000000001040019000000000105601900000000040304330000063004400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b0000118a0000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b000011830000413d0000000002430019000006410400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000005fe0420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f00000002020003670000108e0000013d000000400600043d0000062f0360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011a70000413d0000000004060433000000000404004b0000032b0000613d000000f80220021000000000040304330000063004400197000000000242019f0000063502200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b000005fd07000041000000000854004b00000000080000190000000008078019000005fd05500197000005fd09400197000000000a59004b0000000007008019000000000559013f000005fd0550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000005fe0340009c0000010d0000213d00000000024200490000002005500039000005fd03000041000000000725004b00000000070000190000000007032019000005fd02200197000005fd08500197000000000928004b0000000003008019000000000228013f000005fd0220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011ef0000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011e80000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b000012000000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000011f80000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b000012110000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012090000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b000012220000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000121a0000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b000012330000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000122b0000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b000012440000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000123c0000413d0000000008870019000000000008043500000000066700190000001f0740018f000000200860003900000002055003670000000509400272000012550000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b0000124d0000413d000000000a07004b000012640000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b000012720000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b0000126b0000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005f501000041000005f50430009c000000000301801900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000b01000029000000e4021000390000000201000367000000000221034f000000000202043b000005ff02200198000012ba0000c13d0000000b03000029000000a402300039000000000221034f0000006403300039000000000331034f000000000303043b000000000402043b00000000523400a9000000000504004b000012ac0000613d00000000544200d9000000000334004b000012b40000c13d0000000b030000290000012403300039000000000131034f000000000101043b000000000121001a000700000001001d000012b40000413d000012bf0000013d0000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000b020000290000012402200039000000000121034f000000000101043b000700000001001d0000064201000041000000000010043900000008010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c70000800a0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b0000000702000029000000000112004b000012e60000a13d000000400100043d00000064021000390000064a03000041000000000032043500000044021000390000064b0300004100000000003204350000002402100039000000220300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d10001043000000000030000310000000b020000290000000001230049000000230410008a000001e4022000390000000201000367000000000221034f000000000202043b000005fd05000041000000000642004b00000000060000190000000006058019000005fd04400197000005fd07200197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000002420019000000000121034f000000000101043b000005fe0410009c0000010d0000213d00000000041300490000002005200039000005fd02000041000000000645004b00000000060000190000000006022019000005fd04400197000005fd07500197000000000847004b0000000002008019000000000447013f000005fd0440009c000000000206c019000000000202004b0000010d0000c13d0000003f02100039000000200400008a000000000442016f000000400200043d0000000004420019000000000624004b00000000060000190000000106004039000005fe0740009c0000012b0000213d00000001066001900000012b0000c13d000000400040043f00000000041204360000000006510019000000000336004b0000010d0000213d0000001f0310018f000000020550036700000005061002720000132f0000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000013270000413d000000000703004b0000133e0000613d0000000506600210000000000565034f00000000066400190000000303300210000000000706043300000000073701cf000000000737022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000373019f0000000000360435000000000114001900000000000104350000000001020433000000410110008c0000135c0000c13d00000041012000390000000001010433000000ff0310018f0000001d0130008a000000030500008a000000000151004b0000136e0000213d000000400100043d0000004402100039000006490300004100000000003204350000002402100039000000160300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000000404043300000040012000390000000002010433000000400100043d000006440520009c000013850000413d0000004402100039000006480300004100000000003204350000002402100039000000090300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000600510003900000000002504350000004002100039000000000042043500000020021000390000000000320435000000090200002900000000002104350000000000000435000005f5020000410000000003000414000005f50430009c0000000003028019000005f50410009c00000000010280190000004001100210000000c002300210000000000112019f00000645011001c7000000010200003917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000013ab0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000013a40000413d000000000605004b000013b90000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000013d10000613d0000000001000433000005ff011001970000000802000029000000000221004b0000000002000019000000010200c039000000000101004b0000000001000019000000010100603900000000011201a00000064601000041000000000100c019000000400200043d0000000000120435000005f501000041000005f50320009c0000000001024019000000400110021000000647011001c7000017d00001042e000000400200043d0000001f0430018f0000000503300272000013de0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d60000413d000000000504004b000013ed0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000380760008c0000145b0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014120000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000014750000013d000000380760008c000014ee0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014440000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000015080000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014640000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000147f0000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000159c0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000014d80000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015b50000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014f70000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000015120000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000165f0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000156b0000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000016780000013d0000001f0430018f00000005023002720000158c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015850000413d000000000504004b0000159a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015a50000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000005fd0a000041000000000b83004b000000000b000019000000000b0a8019000005fd08800197000005fd0c300197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009300039000005fd03000041000000000a49004b000000000a000019000000000a032019000005fd04400197000005fd0b900197000000000c4b004b000000000300801900000000044b013f000005fd0440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d00000020043000390000062a0a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000015ed0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015e60000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000015fc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000015f50000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b0000160b0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016040000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a8002720000161c0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016140000413d000000000b06004b0000162b0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000016390000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016320000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000005fe0510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005f501000041000005f50240009c0000000002010019000000000204401900000040022002100000000003030433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000016680000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000005fd0a000041000000000b82004b000000000b000019000000000b0a8019000005fd08800197000005fd0c200197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009200039000005fd02000041000000000a49004b000000000a000019000000000a022019000005fd04400197000005fd0b900197000000000c4b004b000000000200801900000000044b013f000005fd0440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006370a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b000016b00000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000016a90000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b000016bf0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000016b80000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b000016ce0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016c70000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000016df0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016d70000413d000000000b06004b000016ee0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000016fc0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016f50000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000005fe0510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005f501000041000005f50340009c0000000003010019000000000304401900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d0003000000000002000000040100008a0000000003100031000005fd010000410000005f0230008c00000000020000190000000002012019000005fd04300197000000000504004b0000000001008019000005fd0440009c000000000102c019000000000101004b000017680000613d00000002010003670000004402100370000000000202043b000005fe0420009c000017680000213d0000000003230049000005fd04000041000002600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b000017680000c13d0000000003000411000080010330008c000017660000c13d0000000003000412000005ff033001970000000004000410000000000343004b000017660000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000176a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005f502000041000005f50310009c0000000001028019000000c001100210000080010200003917cf17bb0000040f000000010300002900030000000103550000006001100270000105f50010019d000000200130011a00000001012001950000000101200190000017820000613d0000000001000019000017d00001042e0000000001000019000017d10001043000000000431200a900000000422300d9000000000112004b000017970000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000017570000613d000005f502000041000005f50410009c0000000001028019000000c00110021000000637011001c700008009020000390000800104000039000000000500001917cf17bb0000040f0000000003000415000000020330008a00000020033000c90000175f0000013d000000400100043d00000064021000390000064e03000041000000000032043500000044021000390000064f0300004100000000003204350000002402100039000000250300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d1000104300000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000001000412000005ff011001970000000002000410000000000121004b000017a60000c13d0000000001000411000080010110008c000017a80000613d000000000001042d0000000001000019000017d00001042e0000064c0100004100000000001004350000000101000039000000040010043f0000064d01000041000017d100010430000000000403004b000017b80000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b10000413d00000000012300190000000000010435000000000001042d000017be002104210000000102000039000000000001042d0000000002000019000000000001042d000017c3002104230000000102000039000000000001042d0000000002000019000000000001042d000017c8002104210000000102000039000000000001042d0000000002000019000000000001042d000017cd002104230000000102000039000000000001042d0000000002000019000000000001042d000017cf00000432000017d00001042e000017d1000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f190100000000000000000000000000000000000000000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000202bcce7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f722032380000000000000000000075650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f7065966802eaf4c7f1c9550c6463b3beb7b9087e1a4d7428d44371ae2340d9c02dec", + "deployedBytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005f50430019700030000004103550002000000010355000005f50030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000005f70430009c000000450000a13d000005f80430009c000000a90000613d000005f90430009c000000ea0000613d000005fa0330009c000000a60000c13d000000040220008a000005fd03000041000000200420008c00000000040000190000000004034019000005fd05200197000000000605004b000000000300a019000005fd0550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000005fe0310009c0000010d0000213d0000000001120049000005fd02000041000002600310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d000000200100003900000100001004430000012000000443000005f601000041000017d00001042e000000000102004b000000a60000c13d0000000001000019000017d00001042e000005fb0430009c000000eb0000613d000005fc0330009c000000a60000c13d000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000005fe0430009c0000010d0000213d00000004053000390000000004520049000005fd06000041000002600740008c00000000070000190000000007064019000005fd04400197000000000804004b000000000600a019000005fd0440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d0000000004000412000005ff064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b000005fd08000041000000000976004b00000000090000190000000009088019000005fd07700197000005fd0a600197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000005fe0760009c0000010d0000213d00000000076200490000002002500039000005fd08000041000000000972004b00000000090000190000000009082019000005fd07700197000005fd0a200197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062301000041000000c40010043f0000062401000041000000e40010043f0000062201000041000017d10001043017cf179d0000040f0000000001000019000017d00001042e000000040320008a000005fd04000041000000600630008c00000000060000190000000006044019000005fd03300197000000000703004b000000000400a019000005fd0330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000005fe0370009c0000010d0000213d00000004067000390000000003620049000005fd04000041000002600830008c00000000080000190000000008044019000005fd03300197000000000903004b000000000400a019000005fd0330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d0000000003000412000005ff033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b000005ff04400197000000000303043b000006000830009c000001310000413d00000044015000390000060a0200004100000000002104350000002401500039000000080200003900000000002104350000060b010000410000000000150435000000040150003900000020020000390000000000210435000005f501000041000005f50250009c000000000105401900000040011002100000060c011001c7000017d10001043017cf17220000040f000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000005fe0330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d0000000002320049000005fd03000041000002600420008c00000000040000190000000004034019000005fd02200197000000000502004b000000000300a019000005fd0220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017d1000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d0000000001000412000005ff011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d0000002003100039000006250400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006260310009c0000015e0000413d0000064c0100004100000000001004350000004101000039000000040010043f0000064d01000041000017d100010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b000005fd08000041000000000975004b00000000090000190000000009088019000005fd07700197000005fd0a500197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000005fe0160009c0000010d0000213d00000000016200490000002002500039000005fd05000041000000000712004b00000000070000190000000007052019000005fd01100197000005fd08200197000000000918004b0000000005008019000000000118013f000005fd0110009c00000000010700190000000001056019000000000101004b0000010d0000c13d0000000001000414000006010510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f0000000004010433000006010540009c000001740000413d0000060b020000410000000000230435000000a4021000390000060a040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005f501000041000005f50230009c000000000103401900000040011002100000060c011001c7000017d100010430000000c0022002100000060702200197000000400110021000000627011000410000062801100197000000000112019f00000060024002100000062902200197000000000121019f0000062a011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917cf17bb0000040f00030000000103550000006001100270000105f50010019d000005f5041001970000003f014000390000062b05100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000005fe0630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012980000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002c90000c13d0000000702000029000000000121034f000000000101043b000000800210008c000003140000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000902000029000000210220003900000000001204350000046c0000013d000000000221034f000000000202043b00000602022001970000060d0720009c0000026e0000c13d000000430260008c000002ab0000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062001000041000000c40010043f0000062101000041000000e40010043f0000062201000041000017d1000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060208800197000006030980009c0000024a0000613d000006040980009c0000024a0000613d000006050980009c0000024a0000613d000006060580009c00000000050000190000000105006039000000010550018f0000000008260019000005f502200197000000000227034f000000000703004b0000027a0000c13d000000000368004b000012b40000413d0000000003000031000000000683004b000012b40000413d00000608060000410000060907000041000000000505004b00000000050600190000000005076019000000c0011002100000060701100197000000000115019f0000000003830049000005f50330019700000000023203df00000000011203af000000000204001917cf17c50000040f000002890000013d0000000001010433000005f502000041000005f50410009c0000000001028019000005f50430009c000000000203401900000040022002100000006001100210000000000121019f000017d1000104300000060e0120009c000000430000613d0000060b01000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000060f01000041000000c40010043f0000061001000041000017d100010430000000000668004b000012b40000413d0000000006000031000000000786004b000012b40000413d0000000006860049000005f50660019700000000026203df000000c001100210000006070110019700000608011001c700000000011203af0000800902000039000000000600001917cf17c50000040f000300000001035500000000030100190000006003300270000105f50030019d000005f5033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000029b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000002940000413d000000000504004b000002a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d1000104300000002402500039000000000221034f000000000202043b000b00000002001d000005ff0220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061102000041000000800020043f000005ff02400197000800000002001d000000840020043f000005ff01100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c0000038d0000c13d0000000103000031000000200130008c00000020040000390000000004034019000003b90000013d000000710320008c000003310000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d0000000004420019000005fd05000041000000000643004b00000000060000190000000006058019000005fd04400197000005fd07300197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000005fe0410009c0000010d0000213d00000000021200490000002003300039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000006010520009c000007d00000413d000000400100043d00000044021000390000060a0300004100000000003204350000002402100039000000080300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400200043d000900000002001d0000062f0220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000003200000413d00000009030000290000000003030433000000000303004b000004630000c13d0000064c0100004100000000001004350000003201000039000000040010043f0000064d01000041000017d100010430000000020120008c000003e10000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005a70000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000037a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000003720000413d000000000500004b0000037c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005c40000013d000005f502000041000005f50310009c0000000001028019000000c00110021000000612011001c70000000b0200002917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003a60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000039e0000413d000000000705004b000003b50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000043d0000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a00240003900000613030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061403000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c0000053d0000c13d000000010200003900000001010000310000054e0000013d000000010120008c000004bd0000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006390000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000042a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004220000413d000000000500004b0000042c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006560000013d000000400200043d0000001f0430018f00000005033002720000044a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004420000413d000000000504004b000004590000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004cf0000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004aa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004a20000413d000000000500004b000004ac0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004ec0000013d000000400100043d00000044021000390000062c0300004100000000003204350000002402100039000000170300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004d90000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006a60000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000052a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005220000413d000000000600004b0000052c0000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006c30000013d000005f504000041000005f50530009c000000000304801900000060033002100000004002200210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000700000003001d000000000301004b000005770000c13d00000007010000290000000031010434000200000003001d000000000202004b000006140000c13d000000000201004b000007570000c13d000000400400043d000b00000004001d0000060b01000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000058f0000413d000000000604004b000005520000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000005520000013d000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005b10000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c000007620000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000006010000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005f90000413d000000000600004b000006030000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000077f0000013d000000000201004b00000a2c0000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a280000c13d000000400100043d00000044021000390000061f03000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000006430000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009ba0000413d0000008003200270000006310420009c000000000302a019000006310420009c0000000004000019000000100400203900000008054001bf000005fe0630009c00000000040520190000004005300270000005fe0630009c000000000305201900000004054001bf000005f50630009c00000000040520190000002005300270000005f50630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000006930000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000068b0000413d000000000600004b000006950000613d0000000006030433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009d70000013d000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006b00000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006d10000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006ca0000413d000000000143001900000000000104350000000004020433000000000504004b000006de0000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006d70000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000005fe0220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f0000062f0110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f0000002002500039000006330300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bc80000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000002032000390000000504000029000000000334043600000021042000390000000504400272000007420000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000073a0000413d000000000400004b000007440000613d00000005040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000be80000013d000005f5020000410000000204000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000076c0000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a690000413d0000008004300270000006310530009c000000000403a019000006310530009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007bd0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007b50000413d000000000700004b000007bf0000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a860000013d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f5033001970003000000010355000000010220019000000ad70000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000007fb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007f30000413d000000000400004b000007fd0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f00000005033002720000080d0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008050000413d000000000604004b0000081c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b000005fd06000041000000000753004b00000000070000190000000007068019000005fd05500197000005fd08300197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000005fe0350009c0000010d0000213d000000050350021000000000043400490000002006100039000005fd01000041000000000746004b00000000070000190000000007012019000005fd04400197000005fd08600197000000000948004b0000000001008019000000000448013f000005fd0440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d000000200410003900000638055001980000085b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000008530000413d000000000200004b0000085d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000005fe0520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005f502000041000005f50340009c0000000003020019000000000304401900000040033002100000000001010433000005f50410009c00000000010280190000006001100210000000000131019f0000000003000414000005f50430009c0000000002034019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b000005fd06000041000000000754004b00000000070000190000000007068019000005fd05500197000005fd08400197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000005fe0310009c0000010d0000213d00000000021200490000002003400039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000005f50520009c000003020000213d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f50330019700030000000103550000000102200190000015810000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008e10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008d90000413d000000000400004b000008e30000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008f30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008eb0000413d000000000604004b000009020000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a006100039000000000056043500000080051000390000000000450435000000600410003900000000003404350000004003100039000000000023043500000020021000390000063a030000410000000000320435000001c00300003900000000003104350000063b0310009c0000012b0000213d000001e003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b0000063c0300004100000000003204350000008003400039000000000013043500000060014000390000063d03000041000000000031043500000040014000390000063e030000410000000000310435000000800100003900000000001404350000063f0140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005f501000041000005f50320009c000000000201801900000040022002100000000003040433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064004000041000000000042043500000022041000390000000000340435000000420300003900000000003104350000061b0310009c0000012b0000213d0000008003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400300043d0000062f0430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009c40000413d0000000005030433000000000505004b0000032b0000613d000000f805200210000005fd06000041000000000202004b0000000002050019000000000206601900000000050404330000063005500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b5a0000413d0000008004200270000006310520009c000000000402a019000006310520009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a150000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a0d0000413d000000000700004b00000a170000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b770000013d00000007010000290000000001010433000000000201004b00000a560000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a560000c13d000000400100043d00000064021000390000061d03000041000000000032043500000044021000390000061e03000041000000000032043500000024021000390000002a0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400300043d00000024013000390000000902000029000000000021043500000611010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000af20000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b250000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a730000413d0000000006040433000000000606004b0000032b0000613d000000f806300210000005fd07000041000000000303004b0000000003060019000000000307601900000000060504330000063006600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c5d0000413d0000008005300270000006310630009c000000000503a019000006310630009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ac40000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000abc0000413d000000000800004b00000ac60000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c7a0000013d0000001f0430018f000000050230027200000ae20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000adb0000413d000000000504004b00000af00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000005f502000041000005f50310009c00000000010280190000000704000029000005f50340009c00000000020440190000004002200210000000c001100210000000000121019f00000617011001c70000000b0200002917cf17c00000040f000000070a00002900000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b110000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b090000413d000000000705004b00000b210000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c370000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000005fe0410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000ccb0000c13d00000044021000390000000a030000290000000000320435000000200210003900000613030000410000000000320435000000240310003900000009040000290000000000430435000000030300002900000000003104350000061b0310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f0000061c0310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061403000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000ded0000c13d0000000102000039000000010100003100000e000000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b640000413d0000000006040433000000000606004b0000032b0000613d000000f806200210000005fd07000041000000000202004b0000000002060019000000000207601900000000060504330000063006600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cf10000413d0000008005200270000006310620009c000000000502a019000006310620009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bb50000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bad0000413d000000000800004b00000bb70000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d0e0000013d000000400200043d000500000002001d0000062f0220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bd40000413d00000005030000290000000003030433000000000303004b0000032b0000613d000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d0000000004430019000005fd05000041000000000641004b00000000060000190000000006058019000005fd04400197000005fd07100197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000005fe0510009c0000010d0000213d00000000051300490000002003400039000005fd04000041000000000653004b00000000060000190000000006042019000005fd05500197000005fd07300197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f280000c13d000000000132034f000000000101043b000000010200008a000005fd03000041000000000221004b00000000020000190000000002032019000005fd01100197000005fd0410009c0000000003008019000005fd01100167000005fd0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010860000c13d000000400100043d000400000001001d0000062f0110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063202000041000000000021043500000001010000390000000000130435000010860000013d000000400200043d0000001f0430018f000000050330027200000c440000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c3c0000413d000000000504004b00000c530000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c670000413d0000000007050433000000000707004b0000032b0000613d000000f807300210000005fd08000041000000000303004b0000000003070019000000000308601900000000070604330000063007700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d6f0000413d0000008006300270000006310730009c000000000603a019000006310730009c0000000007000019000000100700203900000008087001bf000005fe0960009c00000000070820190000004008600270000005fe0960009c000000000608201900000004087001bf000005f50960009c00000000070820190000002008600270000005f50960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000005fe0a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cb80000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cb00000413d000000000900004b00000cba0000613d0000000009060433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f000006320990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d8c0000013d0000006402100039000006180300004100000000003204350000004402100039000006190300004100000000003204350000002402100039000000360300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400100043d00000044021000390000063903000041000000000032043500000024021000390000001f0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000cfb0000413d0000000007050433000000000707004b0000032b0000613d000000f807200210000005fd08000041000000000202004b0000000002070019000000000208601900000000070604330000063007700197000000000227019f0000000000260435000000400600043d0000062f0260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000006330800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e590000413d0000008007200270000006310820009c000000000702a019000006310820009c0000000008000019000000100800203900000008098001bf000005fe0a70009c00000000080920190000004009700270000005fe0a70009c000000000709201900000004098001bf000005f50a70009c00000000080920190000002009700270000005f50a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000005fe0b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d5c0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d540000413d000000000a00004b00000d5e0000613d000000000a070433000000000a0a004b0000032b0000613d000000000a090433000006300aa00197000000f80b800210000000000aab019f000006320aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e760000013d000000400600043d0000062f0760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d790000413d0000000008060433000000000808004b0000032b0000613d000000f808300210000005fd09000041000000000303004b0000000003080019000000000309601900000000080704330000063008800197000000000338019f0000000000370435000000400700043d0000062f0370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000633090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f8b0000413d0000008008300270000006310930009c000000000803a019000006310930009c00000000090000190000001009002039000000080a9001bf000005fe0b80009c00000000090a2019000000400a800270000005fe0b80009c00000000080a2019000000040a9001bf000005f50b80009c00000000090a2019000000200a800270000005f50b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000005fe0ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000dda0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000dd20000413d000000000b00004b00000ddc0000613d000000000b080433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c900210000000000bbc019f000006320bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fa80000013d000005f504000041000005f50520009c00000000020480190000004002200210000005f50530009c00000000030480190000006003300210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000900000003001d000000000301004b00000e290000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f5e0000c13d000000000201004b000011550000c13d000000400400043d000b00000004001d0000060b0100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e490000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e410000413d000000000604004b00000e040000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e040000013d000000400700043d0000062f0870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e630000413d0000000009070433000000000909004b0000032b0000613d000000f809200210000005fd0a000041000000000202004b000000000209001900000000020a601900000000090804330000063009900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e830000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e7c0000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e920000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e8b0000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000ea10000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000e9a0000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eb00000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000ea90000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ebf0000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000eb80000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ece0000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ec70000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000005fe0450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000013f70000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000014750000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000014750000013d000000380210008c000010690000413d0000002002100270000005f50310009c00000000030100190000000003022019000005f50210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d0000062f0440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f460000413d00000004040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f00000634044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010860000013d000000000201004b00000f750000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006270000613d00000009010000290000000001010433000000000201004b000000430000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a410000613d000000430000013d000000400800043d0000062f0980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f950000413d000000000a080433000000000a0a004b0000032b0000613d000000f80a300210000005fd0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000006300aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fb50000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fae0000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fc40000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fbd0000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fd30000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fcc0000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fe20000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fdb0000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ff10000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000fea0000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b000010000000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b00000ff90000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b0000100f0000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010080000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000005fe0450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000014290000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000015080000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000015080000013d000000400200043d000400000002001d0000062f0220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000010750000413d00000004030000290000000003030433000000000303004b0000032b0000613d000000f80110021000000000030204330000063003300197000000000113019f000005fd01100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000010fb0000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b000005fd04000041000000000659004b00000000060000190000000006048019000005fd05500197000005fd07900197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000005fe0a20009c0000010d0000213d00000000032300490000002009900039000005fd0a000041000000000b39004b000000000b000019000000000b0a2019000005fd03300197000005fd09900197000000000c39004b000000000a008019000000000339013f000005fd0330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d0000000003450019000000000363001900000000037300190000000003830019000000000223001900000000030104330000000002320019000005fe02200197000000380320008c0000119d0000413d0000002003200270000005f50420009c00000000040200190000000004032019000005f50320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d0000062f0560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010e50000413d0000000005060433000000000505004b0000032b0000613d00000000050404330000063005500197000000f807300210000000000557019f00000636055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011b70000013d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000800210008c000011600000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000442043600000021053000390000000505500272000011420000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000113a0000413d000000000500004b000011440000613d0000000005020433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c0000000001002019000000210320003900000000001304350000117d0000013d000005f5020000410000000704000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000116a0000413d0000000004020433000000000404004b0000032b0000613d000000f804100210000005fd05000041000000000101004b0000000001040019000000000105601900000000040304330000063004400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b0000118a0000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b000011830000413d0000000002430019000006410400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000005fe0420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f00000002020003670000108e0000013d000000400600043d0000062f0360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011a70000413d0000000004060433000000000404004b0000032b0000613d000000f80220021000000000040304330000063004400197000000000242019f0000063502200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b000005fd07000041000000000854004b00000000080000190000000008078019000005fd05500197000005fd09400197000000000a59004b0000000007008019000000000559013f000005fd0550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000005fe0340009c0000010d0000213d00000000024200490000002005500039000005fd03000041000000000725004b00000000070000190000000007032019000005fd02200197000005fd08500197000000000928004b0000000003008019000000000228013f000005fd0220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011ef0000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011e80000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b000012000000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000011f80000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b000012110000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012090000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b000012220000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000121a0000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b000012330000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000122b0000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b000012440000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000123c0000413d0000000008870019000000000008043500000000066700190000001f0740018f000000200860003900000002055003670000000509400272000012550000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b0000124d0000413d000000000a07004b000012640000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b000012720000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b0000126b0000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005f501000041000005f50430009c000000000301801900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000b01000029000000e4021000390000000201000367000000000221034f000000000202043b000005ff02200198000012ba0000c13d0000000b03000029000000a402300039000000000221034f0000006403300039000000000331034f000000000303043b000000000402043b00000000523400a9000000000504004b000012ac0000613d00000000544200d9000000000334004b000012b40000c13d0000000b030000290000012403300039000000000131034f000000000101043b000000000121001a000700000001001d000012b40000413d000012bf0000013d0000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000b020000290000012402200039000000000121034f000000000101043b000700000001001d0000064201000041000000000010043900000008010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c70000800a0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b0000000702000029000000000112004b000012e60000a13d000000400100043d00000064021000390000064a03000041000000000032043500000044021000390000064b0300004100000000003204350000002402100039000000220300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d10001043000000000030000310000000b020000290000000001230049000000230410008a000001e4022000390000000201000367000000000221034f000000000202043b000005fd05000041000000000642004b00000000060000190000000006058019000005fd04400197000005fd07200197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000002420019000000000121034f000000000101043b000005fe0410009c0000010d0000213d00000000041300490000002005200039000005fd02000041000000000645004b00000000060000190000000006022019000005fd04400197000005fd07500197000000000847004b0000000002008019000000000447013f000005fd0440009c000000000206c019000000000202004b0000010d0000c13d0000003f02100039000000200400008a000000000442016f000000400200043d0000000004420019000000000624004b00000000060000190000000106004039000005fe0740009c0000012b0000213d00000001066001900000012b0000c13d000000400040043f00000000041204360000000006510019000000000336004b0000010d0000213d0000001f0310018f000000020550036700000005061002720000132f0000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000013270000413d000000000703004b0000133e0000613d0000000506600210000000000565034f00000000066400190000000303300210000000000706043300000000073701cf000000000737022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000373019f0000000000360435000000000114001900000000000104350000000001020433000000410110008c0000135c0000c13d00000041012000390000000001010433000000ff0310018f0000001d0130008a000000030500008a000000000151004b0000136e0000213d000000400100043d0000004402100039000006490300004100000000003204350000002402100039000000160300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000000404043300000040012000390000000002010433000000400100043d000006440520009c000013850000413d0000004402100039000006480300004100000000003204350000002402100039000000090300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000600510003900000000002504350000004002100039000000000042043500000020021000390000000000320435000000090200002900000000002104350000000000000435000005f5020000410000000003000414000005f50430009c0000000003028019000005f50410009c00000000010280190000004001100210000000c002300210000000000112019f00000645011001c7000000010200003917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000013ab0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000013a40000413d000000000605004b000013b90000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000013d10000613d0000000001000433000005ff011001970000000802000029000000000221004b0000000002000019000000010200c039000000000101004b0000000001000019000000010100603900000000011201a00000064601000041000000000100c019000000400200043d0000000000120435000005f501000041000005f50320009c0000000001024019000000400110021000000647011001c7000017d00001042e000000400200043d0000001f0430018f0000000503300272000013de0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d60000413d000000000504004b000013ed0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000380760008c0000145b0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014120000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000014750000013d000000380760008c000014ee0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014440000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000015080000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014640000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000147f0000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000159c0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000014d80000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015b50000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014f70000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000015120000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000165f0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000156b0000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000016780000013d0000001f0430018f00000005023002720000158c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015850000413d000000000504004b0000159a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015a50000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000005fd0a000041000000000b83004b000000000b000019000000000b0a8019000005fd08800197000005fd0c300197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009300039000005fd03000041000000000a49004b000000000a000019000000000a032019000005fd04400197000005fd0b900197000000000c4b004b000000000300801900000000044b013f000005fd0440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d00000020043000390000062a0a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000015ed0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015e60000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000015fc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000015f50000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b0000160b0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016040000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a8002720000161c0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016140000413d000000000b06004b0000162b0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000016390000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016320000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000005fe0510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005f501000041000005f50240009c0000000002010019000000000204401900000040022002100000000003030433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000016680000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000005fd0a000041000000000b82004b000000000b000019000000000b0a8019000005fd08800197000005fd0c200197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009200039000005fd02000041000000000a49004b000000000a000019000000000a022019000005fd04400197000005fd0b900197000000000c4b004b000000000200801900000000044b013f000005fd0440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006370a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b000016b00000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000016a90000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b000016bf0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000016b80000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b000016ce0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016c70000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000016df0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016d70000413d000000000b06004b000016ee0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000016fc0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016f50000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000005fe0510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005f501000041000005f50340009c0000000003010019000000000304401900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d0003000000000002000000040100008a0000000003100031000005fd010000410000005f0230008c00000000020000190000000002012019000005fd04300197000000000504004b0000000001008019000005fd0440009c000000000102c019000000000101004b000017680000613d00000002010003670000004402100370000000000202043b000005fe0420009c000017680000213d0000000003230049000005fd04000041000002600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b000017680000c13d0000000003000411000080010330008c000017660000c13d0000000003000412000005ff033001970000000004000410000000000343004b000017660000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000176a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005f502000041000005f50310009c0000000001028019000000c001100210000080010200003917cf17bb0000040f000000010300002900030000000103550000006001100270000105f50010019d000000200130011a00000001012001950000000101200190000017820000613d0000000001000019000017d00001042e0000000001000019000017d10001043000000000431200a900000000422300d9000000000112004b000017970000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000017570000613d000005f502000041000005f50410009c0000000001028019000000c00110021000000637011001c700008009020000390000800104000039000000000500001917cf17bb0000040f0000000003000415000000020330008a00000020033000c90000175f0000013d000000400100043d00000064021000390000064e03000041000000000032043500000044021000390000064f0300004100000000003204350000002402100039000000250300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d1000104300000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000001000412000005ff011001970000000002000410000000000121004b000017a60000c13d0000000001000411000080010110008c000017a80000613d000000000001042d0000000001000019000017d00001042e0000064c0100004100000000001004350000000101000039000000040010043f0000064d01000041000017d100010430000000000403004b000017b80000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b10000413d00000000012300190000000000010435000000000001042d000017be002104210000000102000039000000000001042d0000000002000019000000000001042d000017c3002104230000000102000039000000000001042d0000000002000019000000000001042d000017c8002104210000000102000039000000000001042d0000000002000019000000000001042d000017cd002104230000000102000039000000000001042d0000000002000019000000000001042d000017cf00000432000017d00001042e000017d1000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f190100000000000000000000000000000000000000000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000202bcce7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f722032380000000000000000000075650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f7065966802eaf4c7f1c9550c6463b3beb7b9087e1a4d7428d44371ae2340d9c02dec", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/EcAdd.yul.zbin b/src/deps/contracts/EcAdd.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..d7942db13c9026dbc222195c441d745acd46351a GIT binary patch literal 6304 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 literal 0 HcmV?d00001 diff --git a/src/deps/contracts/Ecrecover.yul.zbin b/src/deps/contracts/Ecrecover.yul.zbin index 4ae5b1c5d56c9f7fb8b1dd3304c3e43f77d4126c..6ea478387af40eea1b659a5bfcb44d40e0f18ce2 100644 GIT binary patch delta 267 zcmaFBynw}qfq{XMNr7bw)_?nn3dmCO0rj^8y9IzyW0HWDCX) m1#=y-`F!Fbo?Ka$yHakaJNJAn*!8{b?TQ{v=~=0fp3wmMY9syt delta 225 zcmZ3$@_^Zgfq{XMNr7 ztfu|wfV!l$DvdK_2!S`=ikd=%T1XIjdyd*`=i MQEKxSN1y100Ad&+{r~^~ diff --git a/src/deps/contracts/EmptyContract.json b/src/deps/contracts/EmptyContract.json index bf3cde26..3a96fb6c 100644 --- a/src/deps/contracts/EmptyContract.json +++ b/src/deps/contracts/EmptyContract.json @@ -12,8 +12,8 @@ "type": "receive" } ], - "bytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e00000012000104300000000000000000000000020000000000000000000000000000004000000100000000000000000051a2facb5255591d95e024cbf43c9193de3fb9cc83c223a9536a35852c01322b", - "deployedBytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e00000012000104300000000000000000000000020000000000000000000000000000004000000100000000000000000051a2facb5255591d95e024cbf43c9193de3fb9cc83c223a9536a35852c01322b", + "bytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e0000001200010430000000000000000000000002000000000000000000000000000000400000010000000000000000004ff0391cc9c9c321f4092988da16e0f3d6058db76dd76cbe3c5ec972dbfb629f", + "deployedBytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e0000001200010430000000000000000000000002000000000000000000000000000000400000010000000000000000004ff0391cc9c9c321f4092988da16e0f3d6058db76dd76cbe3c5ec972dbfb629f", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/EventWriter.yul.zbin b/src/deps/contracts/EventWriter.yul.zbin index 96dee42c1fb3aca31c90b3f16b2dda005655cead..cd15a102c49d9743710bf6bc8450749807501932 100644 GIT binary patch delta 168 zcmaFBx`1thwV)`Y0ONE91_nkJ1;z3><)_0TpN}JUsYXRynJF eO>Bq0+N;I|rhC`zv)P(3NAC84tcKqEMX3NADk3BR delta 108 zcmZ3$_JDPQwV(*20ONE91_nkJ1;z>30u zgp`6!{ze2zuu73Xkyfj8$(cKESN8)+rkFGL+^=)*06-up5Ncs!Hi@}lQ9cvJSUDk% z0~ZU#u_%#aVq_AtO^kuM{e zEXPu$-4v@ja}w*GA;Y@AhOw&aS-S6sX+NN%y4;Maw~H5U=@aYbgVr1~8ecN8?ytbQ zOY|4{pYC6q(_Y8d!24k;x}S;Z7+3U{826nB849hU=>NPley)obkcQvb~Sz9(|bYws7)Px4)^^^W=_ ole2gE53?U{evTGi9IWmJ-%gQTzuu_i-_PxQIsCPG`OcpI1+QL3JOBUy literal 928 zcma)3Jud`N6utM&$F7K&?D*U*j0mB?SdkDBwh${MXhb7fjoL>qRJ%mbDOI#0Djx-v zNF+od@dqS+0UhVvHf-AIK`;Jz#=pVF*Y} z;=_;K3EJd@ybE+xs8)cf*ykFblPD+;aY`;*Q-Vo*P$L!XK783N(150iHktrb66K_h z>j)2`e3mmUc^nm(e6F&4^*wi%?+vPMjofVNFzY%@&NOXGd?wOojGq_yK*uR1eH1yQ zZLkia4PCzm@62hLe9>zoUL?;RMzkGV_nlV8H-cLFp3i1(rDl)Q;3W>EzR#Y_lh~K} z6;&Yh@P=!BuP(|%)FSozqkJ{r;*8gC!Cz~|{bj|UQJ&1D9(i@&4cMFBU#Z9Rab+2u zRExa3y~m?l=#B8*0Ets}AjmTJ(WtL@-{aVK2t5a<{J*@TGxip Nc1~9>-d-Ok^Pj(=MxX!y diff --git a/src/deps/contracts/KnownCodesStorage.json b/src/deps/contracts/KnownCodesStorage.json index baf577fa..b7633d99 100644 --- a/src/deps/contracts/KnownCodesStorage.json +++ b/src/deps/contracts/KnownCodesStorage.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000005d66e2aaa29fc9cd80c0798c36e39e1edf28eb5cf8fe6d4aad924025ea85b5c6", - "deployedBytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000005d66e2aaa29fc9cd80c0798c36e39e1edf28eb5cf8fe6d4aad924025ea85b5c6", + "bytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000006aca1b77b249f1e5f885db2cd6e516c14e81511f82dd4bd0f8bb4ac27ba50922", + "deployedBytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000006aca1b77b249f1e5f885db2cd6e516c14e81511f82dd4bd0f8bb4ac27ba50922", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/L1Messenger.json b/src/deps/contracts/L1Messenger.json index 86ea5a0b..63cc63f4 100644 --- a/src/deps/contracts/L1Messenger.json +++ b/src/deps/contracts/L1Messenger.json @@ -161,8 +161,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002ab0430019700030000004103550002000000010355000002ab0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002ad0210009c000000530000213d000002b00210009c000000900000613d000002b10110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000600310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002ec0130009c000001710000413d0000006401400039000002ed0200004100000000002104350000004401400039000002ee020000410000000000210435000000240140003900000034020000390000000000210435000002c5010000410000000000140435000000040140003900000020020000390000000000210435000002ab01000041000002ab0240009c00000000010440190000004001100210000002cd011001c700000aa7000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002ac0100004100000aa60001042e000002ae0210009c000000aa0000613d000002af0110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b30420009c000000bb0000213d0000002304200039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b30350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000002010000813d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa7000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000200310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000001670000c13d00000004010000390000000201100367000000000101043b0aa509390000040f000000000100001900000aa60001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aa70001043000000002020003670000000403200370000000000303043b000002b30430009c000000bb0000213d0000002304300039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b30440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000002150000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000000101043b000300000001001d000000400100043d000b00000001001d000002c80110009c000002900000213d0000000301000029000000e0061002700000000b02000029000002c901200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000000f60000413d000a00000005001d00000004020000390000000301000029000002b50110009c0000000008000019000002b10000813d000d00000002001d000000000100041a000000000118004b0000034b0000c13d0000000301000029000002ce0110009c0000000a040000290000000b03000029000001180000213d0000000001030433000000000161004b000001610000a13d00000005016002100000000001410019000002cf0200004100000000002104350000000101600039000007ff0260008c00000000060100190000010d0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000001610000a13d00000001022001bf000000000121004b000001610000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700000006020000290aa50a9b0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000001610000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000001210000413d0000000501000029000000030110008c0000011c0000213d0000000001030433000000000101004b000004c50000c13d000002ea0100004100000000001004350000003201000039000000040010043f000002eb0100004100000aa700010430000002c501000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002ef01000041000000c40010043f000002f00100004100000aa700010430000c00000003001d000d00000002001d000002b9010000410000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b02000039000e00000004001d0aa50a9b0000040f0000000e0a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001950000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018d0000413d000000000705004b000001a40000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000001db0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0aa5088a0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350aa508960000040f000e00000001001d0aa50a7f0000040f000000400100043d0000000e020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400200043d0000001f0430018f0000000503300272000001e80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001e00000413d000000000504004b000001f70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000002ab0410009c000002270000a13d000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002c703000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000e00000007001d000d00000005001d0000000002230049000002ab02200197000c00000006001d000002ab03600197000000020330036700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000002960000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f043000390000000504400272000002570000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000024f0000413d000000000400004b000002590000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000002690000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000002610000413d000000000604004b000002780000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cc0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002b70310009c0000037b0000a13d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa7000104300000001f0430018f0000000502300272000002a10000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000029a0000413d000000000504004b000002af0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000000401000039000000590200008a000600000002001d00000000080000190000000007000019000500000006001d00000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002ab032001970000000604000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000008001d000e00000007001d0000000203300367000002ca0510009c000002030000813d0000000002240049000002ab0220019700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000003600000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c0000000e09000029000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000002f90000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002f10000413d000000000400004b000002fb0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000030a0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000003020000413d0000001f03300190000003190000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000001610000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000e0700002900000001022001900000000506000029000000bb0000613d000000000801043b0000000107700039000000000167004b0000000d020000290000000001020019000002b70000413d000001040000013d000000400100043d0000006402100039000002cb0300004100000000003204350000004402100039000002cc03000041000000000032043500000024021000390000003c030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa7000104300000001f0430018f00000005023002720000036b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003640000413d000000000504004b000003790000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002b901000041000000400400043d000900000004001d0000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b020000390aa50a9b0000040f000000090a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b60000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ae0000413d00000000090a0019000000000705004b000003c60000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000049f0000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b30220009c000002900000213d0000000101100190000002900000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bb0220009c000002900000213d0000000703000029000000c002300039000000400020043f0000000004000410000002bc024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002bd060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002be0120009c000002900000213d0000008001200039000000400010043f000002ab01000041000002ab0430009c000000000301801900000040033002100000000002020433000002ab0420009c00000000020180190000006002200210000000000232019f0000000003000414000002ab0430009c0000000001034019000000c001100210000000000121019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000005000414000002ab0450009c00000000010540190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002ab0310019700000000412300a9000002c102200197000002c10410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000c801100039000000000121001a0000008a0000413d000002ab0210009c000002030000213d0000000002100420000000400100043d000000000202004b000006e90000c13d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400200043d0000001f0430018f0000000503300272000004ac0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004a40000413d000000000504004b000004bb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b50210009c0000000007000019000005320000813d0000000201000039000300000001001d000000000101041a000000000117004b000005de0000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b50210009c000b00000000001d000006110000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006bc0000c13d00000008010000290000000e02000029000000000112004b000001610000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e202200197000002bd0220009c000006d40000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000001610000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002e50550009c000007930000413d000000400100043d0000004402100039000002e9030000410000000000320435000002c502000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000005f60000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005810000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005790000413d000000000400004b000005830000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005920000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000058a0000413d0000001f03300190000005a10000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005360000413d000004da0000013d000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000008402100039000002d10300004100000000003204350000006402100039000002d20300004100000000003204350000004402100039000002d3030000410000000000320435000000240210003900000044030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa7000104300000001f0430018f0000000502300272000006010000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005fa0000413d000000000504004b0000060f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002d503200198000007300000c13d000002d70320009c000007420000813d000002d802200198000007540000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00000002020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000007660000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000066a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006620000413d000000000400004b0000066c0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000067b0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006730000413d0000001f033001900000068a0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007810000c13d0000000001020433000002da011001970000000d02000029000000db02200210000002db02200197000000000112019f000002bd021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006150000413d000004ee0000013d000000400100043d0000008402100039000002df0300004100000000003204350000006402100039000002e00300004100000000003204350000004402100039000002e103000041000000000032043500000024021000390000005e030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa700010430000000400100043d0000006402100039000002e30300004100000000003204350000004402100039000002e4030000410000000000320435000000240210003900000027030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa700010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fc0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f40000413d000000000603004b0000070b0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002ab03000041000002ab0410009c00000000010380190000004001100210000002ab0420009c00000000020380190000006002200210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c70000800d020000390000000303000039000002c20400004100000001050000290000000b060000290aa50a960000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400100043d0000004402100039000002d6030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002dd030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f0000000502300272000007710000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000076a0000413d000000000504004b0000077f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000400100043d0000004402100039000002d9030000410000000000320435000000240210003900000019030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b50770009c000007a40000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002e60400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007c70000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007bf0000413d00000007070000290000000007720019000000000206004b000007d80000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002e702200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000007ef0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007e70000413d000000000603004b000007fe0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002e8011001970000000e0400002900000000014100490000000001210019000002ab02000041000002ab0340009c000000000302001900000000030440190000004003300210000002ab0410009c00000000010280190000006001100210000000000131019f0000000003000414000002ab0430009c0000000002034019000000c002200210000000000112019f0000800e020000390aa50a960000040f00000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008280000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000081f0000413d000000000705004b000008380000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008640000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0aa509bb0000040f0000000501000029000000000010041d00000007010000290000000c020000290aa509d30000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000aa60001042e000000400200043d0000001f0430018f0000000503300272000008710000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000008690000413d000000000504004b000008800000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000400100043d000002f10210009c000008900000813d000000c002100039000000400020043f000000000001042d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa70001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002bd03000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f20310009c0000092d0000813d0000008003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002b70310009c0000092d0000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009330000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000004000414000002ab0540009c00000000010440190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f00000001012001900000092b0000613d0000000101000029000000000001042d000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa70001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f30350009c000009920000813d0000006003500039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001050433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000009900000613d000000000101043b0000000102000029000000000012041b0000000001000413000002ab031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000098a0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000098a0000c13d0000000001210019000002f40210009c000009980000813d00000028011000390000000002100420000000400100043d000000000202004b000009aa0000613d0000000000610435000002ab020000410000000003000414000002ab0430009c0000000003028019000002ab0410009c00000000010280190000004001100210000000c002300210000000000112019f000002f5011001c70000800d020000390000000103000039000002f6040000410aa50a960000040f0000000101200190000009900000613d000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000000101004b000009be0000613d000000000001042d000000400100043d0000006402100039000002f70300004100000000003204350000004402100039000002f803000041000000000032043500000024021000390000002a030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa70001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002ab02100197000000010150019000000a320000c13d0000000001000031000000000541004b00000a320000413d0000000202200367000002ca0530009c00000a380000813d0000000001410049000002ab0110019700000000011203df000000c002300210000002b402200197000002b5022001c700000000012103af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab033001970003000000010355000000010220019000000a4a0000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c00000a650000213d000000010440019000000a650000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a0c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a040000413d000000000400004b00000a0e0000613d0000000104000031000000000443004b00000a6b0000213d00000003050003670000001f0430018f000000050330027200000a1e0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a160000413d000000000604004b00000a2d0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a6d0000c13d0000000001020433000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f000000050230027200000a550000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a4e0000413d000000000504004b00000a630000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000a0010000390000000001100420000000000101004b00000a840000613d000000000001042d000000400100043d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa70001043000000a99002104210000000102000039000000000001042d0000000002000019000000000001042d00000a9e002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa3002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa50000043200000aa60001042e00000aa700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f6164657200000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000222305643f63f80b694ef06950a98ab89c3d931c7ae594c7060e2c19ebf144a0", - "deployedBytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002ab0430019700030000004103550002000000010355000002ab0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002ad0210009c000000530000213d000002b00210009c000000900000613d000002b10110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000600310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002ec0130009c000001710000413d0000006401400039000002ed0200004100000000002104350000004401400039000002ee020000410000000000210435000000240140003900000034020000390000000000210435000002c5010000410000000000140435000000040140003900000020020000390000000000210435000002ab01000041000002ab0240009c00000000010440190000004001100210000002cd011001c700000aa7000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002ac0100004100000aa60001042e000002ae0210009c000000aa0000613d000002af0110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b30420009c000000bb0000213d0000002304200039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b30350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000002010000813d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa7000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000200310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000001670000c13d00000004010000390000000201100367000000000101043b0aa509390000040f000000000100001900000aa60001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aa70001043000000002020003670000000403200370000000000303043b000002b30430009c000000bb0000213d0000002304300039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b30440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000002150000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000000101043b000300000001001d000000400100043d000b00000001001d000002c80110009c000002900000213d0000000301000029000000e0061002700000000b02000029000002c901200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000000f60000413d000a00000005001d00000004020000390000000301000029000002b50110009c0000000008000019000002b10000813d000d00000002001d000000000100041a000000000118004b0000034b0000c13d0000000301000029000002ce0110009c0000000a040000290000000b03000029000001180000213d0000000001030433000000000161004b000001610000a13d00000005016002100000000001410019000002cf0200004100000000002104350000000101600039000007ff0260008c00000000060100190000010d0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000001610000a13d00000001022001bf000000000121004b000001610000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700000006020000290aa50a9b0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000001610000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000001210000413d0000000501000029000000030110008c0000011c0000213d0000000001030433000000000101004b000004c50000c13d000002ea0100004100000000001004350000003201000039000000040010043f000002eb0100004100000aa700010430000002c501000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002ef01000041000000c40010043f000002f00100004100000aa700010430000c00000003001d000d00000002001d000002b9010000410000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b02000039000e00000004001d0aa50a9b0000040f0000000e0a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001950000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018d0000413d000000000705004b000001a40000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000001db0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0aa5088a0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350aa508960000040f000e00000001001d0aa50a7f0000040f000000400100043d0000000e020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400200043d0000001f0430018f0000000503300272000001e80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001e00000413d000000000504004b000001f70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000002ab0410009c000002270000a13d000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002c703000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000e00000007001d000d00000005001d0000000002230049000002ab02200197000c00000006001d000002ab03600197000000020330036700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000002960000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f043000390000000504400272000002570000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000024f0000413d000000000400004b000002590000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000002690000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000002610000413d000000000604004b000002780000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cc0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002b70310009c0000037b0000a13d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa7000104300000001f0430018f0000000502300272000002a10000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000029a0000413d000000000504004b000002af0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000000401000039000000590200008a000600000002001d00000000080000190000000007000019000500000006001d00000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002ab032001970000000604000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000008001d000e00000007001d0000000203300367000002ca0510009c000002030000813d0000000002240049000002ab0220019700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000003600000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c0000000e09000029000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000002f90000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002f10000413d000000000400004b000002fb0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000030a0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000003020000413d0000001f03300190000003190000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000001610000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000e0700002900000001022001900000000506000029000000bb0000613d000000000801043b0000000107700039000000000167004b0000000d020000290000000001020019000002b70000413d000001040000013d000000400100043d0000006402100039000002cb0300004100000000003204350000004402100039000002cc03000041000000000032043500000024021000390000003c030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa7000104300000001f0430018f00000005023002720000036b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003640000413d000000000504004b000003790000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002b901000041000000400400043d000900000004001d0000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b020000390aa50a9b0000040f000000090a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b60000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ae0000413d00000000090a0019000000000705004b000003c60000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000049f0000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b30220009c000002900000213d0000000101100190000002900000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bb0220009c000002900000213d0000000703000029000000c002300039000000400020043f0000000004000410000002bc024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002bd060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002be0120009c000002900000213d0000008001200039000000400010043f000002ab01000041000002ab0430009c000000000301801900000040033002100000000002020433000002ab0420009c00000000020180190000006002200210000000000232019f0000000003000414000002ab0430009c0000000001034019000000c001100210000000000121019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000005000414000002ab0450009c00000000010540190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002ab0310019700000000412300a9000002c102200197000002c10410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000c801100039000000000121001a0000008a0000413d000002ab0210009c000002030000213d0000000002100420000000400100043d000000000202004b000006e90000c13d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400200043d0000001f0430018f0000000503300272000004ac0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004a40000413d000000000504004b000004bb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b50210009c0000000007000019000005320000813d0000000201000039000300000001001d000000000101041a000000000117004b000005de0000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b50210009c000b00000000001d000006110000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006bc0000c13d00000008010000290000000e02000029000000000112004b000001610000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e202200197000002bd0220009c000006d40000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000001610000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002e50550009c000007930000413d000000400100043d0000004402100039000002e9030000410000000000320435000002c502000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000005f60000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005810000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005790000413d000000000400004b000005830000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005920000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000058a0000413d0000001f03300190000005a10000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005360000413d000004da0000013d000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000008402100039000002d10300004100000000003204350000006402100039000002d20300004100000000003204350000004402100039000002d3030000410000000000320435000000240210003900000044030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa7000104300000001f0430018f0000000502300272000006010000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005fa0000413d000000000504004b0000060f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002d503200198000007300000c13d000002d70320009c000007420000813d000002d802200198000007540000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00000002020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000007660000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000066a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006620000413d000000000400004b0000066c0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000067b0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006730000413d0000001f033001900000068a0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007810000c13d0000000001020433000002da011001970000000d02000029000000db02200210000002db02200197000000000112019f000002bd021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006150000413d000004ee0000013d000000400100043d0000008402100039000002df0300004100000000003204350000006402100039000002e00300004100000000003204350000004402100039000002e103000041000000000032043500000024021000390000005e030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa700010430000000400100043d0000006402100039000002e30300004100000000003204350000004402100039000002e4030000410000000000320435000000240210003900000027030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa700010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fc0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f40000413d000000000603004b0000070b0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002ab03000041000002ab0410009c00000000010380190000004001100210000002ab0420009c00000000020380190000006002200210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c70000800d020000390000000303000039000002c20400004100000001050000290000000b060000290aa50a960000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400100043d0000004402100039000002d6030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002dd030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f0000000502300272000007710000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000076a0000413d000000000504004b0000077f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000400100043d0000004402100039000002d9030000410000000000320435000000240210003900000019030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b50770009c000007a40000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002e60400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007c70000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007bf0000413d00000007070000290000000007720019000000000206004b000007d80000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002e702200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000007ef0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007e70000413d000000000603004b000007fe0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002e8011001970000000e0400002900000000014100490000000001210019000002ab02000041000002ab0340009c000000000302001900000000030440190000004003300210000002ab0410009c00000000010280190000006001100210000000000131019f0000000003000414000002ab0430009c0000000002034019000000c002200210000000000112019f0000800e020000390aa50a960000040f00000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008280000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000081f0000413d000000000705004b000008380000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008640000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0aa509bb0000040f0000000501000029000000000010041d00000007010000290000000c020000290aa509d30000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000aa60001042e000000400200043d0000001f0430018f0000000503300272000008710000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000008690000413d000000000504004b000008800000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000400100043d000002f10210009c000008900000813d000000c002100039000000400020043f000000000001042d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa70001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002bd03000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f20310009c0000092d0000813d0000008003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002b70310009c0000092d0000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009330000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000004000414000002ab0540009c00000000010440190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f00000001012001900000092b0000613d0000000101000029000000000001042d000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa70001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f30350009c000009920000813d0000006003500039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001050433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000009900000613d000000000101043b0000000102000029000000000012041b0000000001000413000002ab031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000098a0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000098a0000c13d0000000001210019000002f40210009c000009980000813d00000028011000390000000002100420000000400100043d000000000202004b000009aa0000613d0000000000610435000002ab020000410000000003000414000002ab0430009c0000000003028019000002ab0410009c00000000010280190000004001100210000000c002300210000000000112019f000002f5011001c70000800d020000390000000103000039000002f6040000410aa50a960000040f0000000101200190000009900000613d000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000000101004b000009be0000613d000000000001042d000000400100043d0000006402100039000002f70300004100000000003204350000004402100039000002f803000041000000000032043500000024021000390000002a030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa70001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002ab02100197000000010150019000000a320000c13d0000000001000031000000000541004b00000a320000413d0000000202200367000002ca0530009c00000a380000813d0000000001410049000002ab0110019700000000011203df000000c002300210000002b402200197000002b5022001c700000000012103af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab033001970003000000010355000000010220019000000a4a0000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c00000a650000213d000000010440019000000a650000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a0c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a040000413d000000000400004b00000a0e0000613d0000000104000031000000000443004b00000a6b0000213d00000003050003670000001f0430018f000000050330027200000a1e0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a160000413d000000000604004b00000a2d0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a6d0000c13d0000000001020433000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f000000050230027200000a550000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a4e0000413d000000000504004b00000a630000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000a0010000390000000001100420000000000101004b00000a840000613d000000000001042d000000400100043d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa70001043000000a99002104210000000102000039000000000001042d0000000002000019000000000001042d00000a9e002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa3002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa50000043200000aa60001042e00000aa700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f6164657200000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000222305643f63f80b694ef06950a98ab89c3d931c7ae594c7060e2c19ebf144a0", + "bytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002af0430019700030000004103550002000000010355000002af0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002b10210009c000000530000213d000002b40210009c000000900000613d000002b50110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000600310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002f20130009c000001040000413d0000006401400039000002f30200004100000000002104350000004401400039000002f4020000410000000000210435000000240140003900000034020000390000000000210435000002c9010000410000000000140435000000040140003900000020020000390000000000210435000002af01000041000002af0240009c00000000010440190000004001100210000002d2011001c700000aba000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002b00100004100000ab90001042e000002b20210009c000000aa0000613d000002b30110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b70420009c000000bb0000213d0000002304200039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b70350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000001940000813d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000200310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000000fa0000c13d00000004010000390000000201100367000000000101043b0ab8094c0000040f000000000100001900000ab90001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aba0001043000000002020003670000000403200370000000000303043b000002b70430009c000000bb0000213d0000002304300039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b70440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000001a80000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000400300043d000000000201043b000002cc0120009c000003620000413d0000004401300039000002f1020000410000000000210435000000240130003900000014020000390000000000210435000002c9010000410000000000130435000000040130003900000020020000390000000000210435000002af01000041000002af0230009c00000000010340190000004001100210000002ca011001c700000aba00010430000002c901000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002f501000041000000c40010043f000002f60100004100000aba00010430000c00000003001d000d00000002001d000002bd010000410000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b02000039000e00000004001d0ab80aae0000040f0000000e0a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001280000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001200000413d000000000705004b000001370000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000016e0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0ab8089d0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350ab808a90000040f000e00000001001d0ab80a920000040f000000400100043d0000000e020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400200043d0000001f0430018f00000005033002720000017b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001730000413d000000000504004b0000018a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000002af0410009c000001ba0000a13d000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002cb03000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000e00000007001d000d00000005001d0000000002230049000002af02200197000c00000006001d000002af03600197000000020330036700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000003470000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f043000390000000504400272000001ea0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000001e20000413d000000000400004b000001ec0000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000001fc0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000001f40000413d000000000604004b0000020b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005df0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002bd01000041000000400400043d000900000004001d0000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b020000390ab80aae0000040f000000090a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000025e0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002560000413d00000000090a0019000000000705004b0000026e0000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004b20000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b70220009c000003660000213d0000000101100190000003660000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bf0220009c000003660000213d0000000703000029000000c002300039000000400020043f0000000004000410000002c0024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002c1060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002c20120009c000003660000213d0000008001200039000000400010043f000002af01000041000002af0430009c000000000301801900000040033002100000000002020433000002af0420009c00000000020180190000006002200210000000000232019f0000000003000414000002af0430009c0000000001034019000000c001100210000000000121019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000005000414000002af0450009c00000000010540190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002af0310019700000000412300a9000002c502200197000002c50410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000a001100039000000000121001a0000008a0000413d000002af0210009c000001960000213d0000000002100420000000400100043d000000000202004b000006e70000c13d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000003520000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000034b0000413d000000000504004b000003600000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000300000002001d000b00000003001d000002cd0130009c0000036c0000a13d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba000104300000000307000029000000e0067002700000000b02000029000002ce01200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000003770000413d000a00000005001d0000000402000039000002b90170009c0000000007000019000600000006001d000003e90000813d000d00000002001d000000000100041a000000000117004b000004820000c13d0000000301000029000002d30110009c0000000b030000290000000a0400002900000006050000290000039a0000213d0000000001030433000000000151004b000003e30000a13d00000005015002100000000001410019000002d40200004100000000002104350000000101500039000007ff0250008c00000000050100190000038f0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000003e30000a13d00000001022001bf000000000121004b000003e30000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700000006020000290ab80aae0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000003e30000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000003a30000413d0000000501000029000000030110008c0000039e0000213d0000000001030433000000000101004b000004d80000c13d000002ef0100004100000000001004350000003201000039000000040010043f000002f00100004100000aba000104300000000401000039000000590200008a000500000002001d0000000007000019000000000600001900000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002af032001970000000504000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000007001d000e00000006001d0000000203300367000002cf0510009c000001960000813d0000000002240049000002af0220019700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000004970000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c0000000e09000029000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000004300000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004280000413d000000000400004b000004320000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000004410000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000004390000413d0000001f03300190000004500000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000003e30000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000e0600002900000001022001900000000602000029000000bb0000613d000000000701043b0000000106600039000000000126004b0000000d020000290000000001020019000003ee0000413d000003850000013d000000400100043d0000006402100039000002d00300004100000000003204350000004402100039000002d103000041000000000032043500000024021000390000003c030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba000104300000001f0430018f0000000502300272000004a20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000049b0000413d000000000504004b000004b00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400200043d0000001f0430018f0000000503300272000004bf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004b70000413d000000000504004b000004ce0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b90210009c0000000007000019000005450000813d0000000201000039000300000001001d000000000101041a000000000117004b000005f10000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b90210009c000b00000000001d000006240000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006cf0000c13d00000008010000290000000e02000029000000000112004b000003e30000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e702200197000002c10220009c0000072e0000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000003e30000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002ea0550009c000007a60000413d000000400100043d0000004402100039000002ee030000410000000000320435000002c902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000006090000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005940000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000058c0000413d000000000400004b000005960000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005a50000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000059d0000413d0000001f03300190000005b40000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005490000413d000004ed0000013d000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000008402100039000002d60300004100000000003204350000006402100039000002d70300004100000000003204350000004402100039000002d8030000410000000000320435000000240210003900000044030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba000104300000001f0430018f0000000502300272000006140000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000060d0000413d000000000504004b000006220000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002da03200198000007430000c13d000002dc0320009c000007550000813d000002dd02200198000007670000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00000002020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000007790000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000067d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006750000413d000000000400004b0000067f0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000068e0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006860000413d0000001f033001900000069d0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007940000c13d0000000001020433000002df011001970000000d02000029000000db02200210000002e002200197000000000112019f000002c1021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006280000413d000005010000013d000000400100043d0000008402100039000002e40300004100000000003204350000006402100039000002e50300004100000000003204350000004402100039000002e603000041000000000032043500000024021000390000005e030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba00010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fa0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f20000413d000000000603004b000007090000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002af03000041000002af0410009c00000000010380190000004001100210000002af0420009c00000000020380190000006002200210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c70000800d020000390000000303000039000002c60400004100000001050000290000000b060000290ab80aa90000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400100043d0000006402100039000002e80300004100000000003204350000004402100039000002e9030000410000000000320435000000240210003900000027030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba00010430000000400100043d0000004402100039000002db030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e3030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e2030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000007840000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000077d0000413d000000000504004b000007920000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000019030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b90770009c000007b70000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002eb0400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007da0000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007d20000413d00000007070000290000000007720019000000000206004b000007eb0000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002ec02200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000008020000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007fa0000413d000000000603004b000008110000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002ed011001970000000e0400002900000000014100490000000001210019000002af02000041000002af0340009c000000000302001900000000030440190000004003300210000002af0410009c00000000010280190000006001100210000000000131019f0000000003000414000002af0430009c0000000002034019000000c002200210000000000112019f0000800e020000390ab80aa90000040f00000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000083b0000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000008320000413d000000000705004b0000084b0000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008770000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0ab809ce0000040f0000000501000029000000000010041d00000007010000290000000c020000290ab809e60000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000ab90001042e000000400200043d0000001f0430018f0000000503300272000008840000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087c0000413d000000000504004b000008930000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000400100043d000002f70210009c000008a30000813d000000c002100039000000400020043f000000000001042d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba0001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002c103000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f80310009c000009400000813d0000008003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002bb0310009c000009400000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009460000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000004000414000002af0540009c00000000010440190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f00000001012001900000093e0000613d0000000101000029000000000001042d000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba0001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f90350009c000009a50000813d0000006003500039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001050433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000009a30000613d000000000101043b0000000102000029000000000012041b0000000001000413000002af031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000099d0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000099d0000c13d0000000001210019000002fa0210009c000009ab0000813d00000028011000390000000002100420000000400100043d000000000202004b000009bd0000613d0000000000610435000002af020000410000000003000414000002af0430009c0000000003028019000002af0410009c00000000010280190000004001100210000000c002300210000000000112019f000002fb011001c70000800d020000390000000103000039000002fc040000410ab80aa90000040f0000000101200190000009a30000613d000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000000101004b000009d10000613d000000000001042d000000400100043d0000006402100039000002fd0300004100000000003204350000004402100039000002fe03000041000000000032043500000024021000390000002a030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba0001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002af02100197000000010150019000000a450000c13d0000000001000031000000000541004b00000a450000413d0000000202200367000002cf0530009c00000a4b0000813d0000000001410049000002af0110019700000000011203df000000c002300210000002b802200197000002b9022001c700000000012103af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af033001970003000000010355000000010220019000000a5d0000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c00000a780000213d000000010440019000000a780000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a1f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a170000413d000000000400004b00000a210000613d0000000104000031000000000443004b00000a7e0000213d00000003050003670000001f0430018f000000050330027200000a310000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a290000413d000000000604004b00000a400000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a800000c13d0000000001020433000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f000000050230027200000a680000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a610000413d000000000504004b00000a760000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000078010000390000000001100420000000000101004b00000a970000613d000000000001042d000000400100043d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000aac002104210000000102000039000000000001042d0000000002000019000000000001042d00000ab1002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab6002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab80000043200000ab90001042e00000aba00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000546f6f206d616e79204c322d3e4c31206c6f677300000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000918be26e3402038993f44a7d3e3c4373187a68986a393c0b39192bb13d9ba4c6", + "deployedBytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002af0430019700030000004103550002000000010355000002af0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002b10210009c000000530000213d000002b40210009c000000900000613d000002b50110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000600310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002f20130009c000001040000413d0000006401400039000002f30200004100000000002104350000004401400039000002f4020000410000000000210435000000240140003900000034020000390000000000210435000002c9010000410000000000140435000000040140003900000020020000390000000000210435000002af01000041000002af0240009c00000000010440190000004001100210000002d2011001c700000aba000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002b00100004100000ab90001042e000002b20210009c000000aa0000613d000002b30110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b70420009c000000bb0000213d0000002304200039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b70350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000001940000813d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000200310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000000fa0000c13d00000004010000390000000201100367000000000101043b0ab8094c0000040f000000000100001900000ab90001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aba0001043000000002020003670000000403200370000000000303043b000002b70430009c000000bb0000213d0000002304300039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b70440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000001a80000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000400300043d000000000201043b000002cc0120009c000003620000413d0000004401300039000002f1020000410000000000210435000000240130003900000014020000390000000000210435000002c9010000410000000000130435000000040130003900000020020000390000000000210435000002af01000041000002af0230009c00000000010340190000004001100210000002ca011001c700000aba00010430000002c901000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002f501000041000000c40010043f000002f60100004100000aba00010430000c00000003001d000d00000002001d000002bd010000410000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b02000039000e00000004001d0ab80aae0000040f0000000e0a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001280000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001200000413d000000000705004b000001370000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000016e0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0ab8089d0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350ab808a90000040f000e00000001001d0ab80a920000040f000000400100043d0000000e020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400200043d0000001f0430018f00000005033002720000017b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001730000413d000000000504004b0000018a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000002af0410009c000001ba0000a13d000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002cb03000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000e00000007001d000d00000005001d0000000002230049000002af02200197000c00000006001d000002af03600197000000020330036700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000003470000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f043000390000000504400272000001ea0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000001e20000413d000000000400004b000001ec0000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000001fc0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000001f40000413d000000000604004b0000020b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005df0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002bd01000041000000400400043d000900000004001d0000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b020000390ab80aae0000040f000000090a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000025e0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002560000413d00000000090a0019000000000705004b0000026e0000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004b20000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b70220009c000003660000213d0000000101100190000003660000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bf0220009c000003660000213d0000000703000029000000c002300039000000400020043f0000000004000410000002c0024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002c1060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002c20120009c000003660000213d0000008001200039000000400010043f000002af01000041000002af0430009c000000000301801900000040033002100000000002020433000002af0420009c00000000020180190000006002200210000000000232019f0000000003000414000002af0430009c0000000001034019000000c001100210000000000121019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000005000414000002af0450009c00000000010540190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002af0310019700000000412300a9000002c502200197000002c50410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000a001100039000000000121001a0000008a0000413d000002af0210009c000001960000213d0000000002100420000000400100043d000000000202004b000006e70000c13d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000003520000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000034b0000413d000000000504004b000003600000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000300000002001d000b00000003001d000002cd0130009c0000036c0000a13d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba000104300000000307000029000000e0067002700000000b02000029000002ce01200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000003770000413d000a00000005001d0000000402000039000002b90170009c0000000007000019000600000006001d000003e90000813d000d00000002001d000000000100041a000000000117004b000004820000c13d0000000301000029000002d30110009c0000000b030000290000000a0400002900000006050000290000039a0000213d0000000001030433000000000151004b000003e30000a13d00000005015002100000000001410019000002d40200004100000000002104350000000101500039000007ff0250008c00000000050100190000038f0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000003e30000a13d00000001022001bf000000000121004b000003e30000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700000006020000290ab80aae0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000003e30000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000003a30000413d0000000501000029000000030110008c0000039e0000213d0000000001030433000000000101004b000004d80000c13d000002ef0100004100000000001004350000003201000039000000040010043f000002f00100004100000aba000104300000000401000039000000590200008a000500000002001d0000000007000019000000000600001900000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002af032001970000000504000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000007001d000e00000006001d0000000203300367000002cf0510009c000001960000813d0000000002240049000002af0220019700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000004970000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c0000000e09000029000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000004300000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004280000413d000000000400004b000004320000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000004410000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000004390000413d0000001f03300190000004500000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000003e30000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000e0600002900000001022001900000000602000029000000bb0000613d000000000701043b0000000106600039000000000126004b0000000d020000290000000001020019000003ee0000413d000003850000013d000000400100043d0000006402100039000002d00300004100000000003204350000004402100039000002d103000041000000000032043500000024021000390000003c030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba000104300000001f0430018f0000000502300272000004a20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000049b0000413d000000000504004b000004b00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400200043d0000001f0430018f0000000503300272000004bf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004b70000413d000000000504004b000004ce0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b90210009c0000000007000019000005450000813d0000000201000039000300000001001d000000000101041a000000000117004b000005f10000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b90210009c000b00000000001d000006240000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006cf0000c13d00000008010000290000000e02000029000000000112004b000003e30000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e702200197000002c10220009c0000072e0000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000003e30000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002ea0550009c000007a60000413d000000400100043d0000004402100039000002ee030000410000000000320435000002c902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000006090000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005940000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000058c0000413d000000000400004b000005960000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005a50000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000059d0000413d0000001f03300190000005b40000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005490000413d000004ed0000013d000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000008402100039000002d60300004100000000003204350000006402100039000002d70300004100000000003204350000004402100039000002d8030000410000000000320435000000240210003900000044030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba000104300000001f0430018f0000000502300272000006140000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000060d0000413d000000000504004b000006220000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002da03200198000007430000c13d000002dc0320009c000007550000813d000002dd02200198000007670000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00000002020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000007790000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000067d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006750000413d000000000400004b0000067f0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000068e0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006860000413d0000001f033001900000069d0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007940000c13d0000000001020433000002df011001970000000d02000029000000db02200210000002e002200197000000000112019f000002c1021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006280000413d000005010000013d000000400100043d0000008402100039000002e40300004100000000003204350000006402100039000002e50300004100000000003204350000004402100039000002e603000041000000000032043500000024021000390000005e030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba00010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fa0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f20000413d000000000603004b000007090000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002af03000041000002af0410009c00000000010380190000004001100210000002af0420009c00000000020380190000006002200210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c70000800d020000390000000303000039000002c60400004100000001050000290000000b060000290ab80aa90000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400100043d0000006402100039000002e80300004100000000003204350000004402100039000002e9030000410000000000320435000000240210003900000027030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba00010430000000400100043d0000004402100039000002db030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e3030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e2030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000007840000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000077d0000413d000000000504004b000007920000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000019030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b90770009c000007b70000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002eb0400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007da0000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007d20000413d00000007070000290000000007720019000000000206004b000007eb0000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002ec02200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000008020000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007fa0000413d000000000603004b000008110000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002ed011001970000000e0400002900000000014100490000000001210019000002af02000041000002af0340009c000000000302001900000000030440190000004003300210000002af0410009c00000000010280190000006001100210000000000131019f0000000003000414000002af0430009c0000000002034019000000c002200210000000000112019f0000800e020000390ab80aa90000040f00000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000083b0000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000008320000413d000000000705004b0000084b0000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008770000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0ab809ce0000040f0000000501000029000000000010041d00000007010000290000000c020000290ab809e60000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000ab90001042e000000400200043d0000001f0430018f0000000503300272000008840000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087c0000413d000000000504004b000008930000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000400100043d000002f70210009c000008a30000813d000000c002100039000000400020043f000000000001042d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba0001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002c103000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f80310009c000009400000813d0000008003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002bb0310009c000009400000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009460000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000004000414000002af0540009c00000000010440190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f00000001012001900000093e0000613d0000000101000029000000000001042d000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba0001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f90350009c000009a50000813d0000006003500039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001050433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000009a30000613d000000000101043b0000000102000029000000000012041b0000000001000413000002af031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000099d0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000099d0000c13d0000000001210019000002fa0210009c000009ab0000813d00000028011000390000000002100420000000400100043d000000000202004b000009bd0000613d0000000000610435000002af020000410000000003000414000002af0430009c0000000003028019000002af0410009c00000000010280190000004001100210000000c002300210000000000112019f000002fb011001c70000800d020000390000000103000039000002fc040000410ab80aa90000040f0000000101200190000009a30000613d000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000000101004b000009d10000613d000000000001042d000000400100043d0000006402100039000002fd0300004100000000003204350000004402100039000002fe03000041000000000032043500000024021000390000002a030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba0001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002af02100197000000010150019000000a450000c13d0000000001000031000000000541004b00000a450000413d0000000202200367000002cf0530009c00000a4b0000813d0000000001410049000002af0110019700000000011203df000000c002300210000002b802200197000002b9022001c700000000012103af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af033001970003000000010355000000010220019000000a5d0000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c00000a780000213d000000010440019000000a780000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a1f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a170000413d000000000400004b00000a210000613d0000000104000031000000000443004b00000a7e0000213d00000003050003670000001f0430018f000000050330027200000a310000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a290000413d000000000604004b00000a400000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a800000c13d0000000001020433000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f000000050230027200000a680000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a610000413d000000000504004b00000a760000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000078010000390000000001100420000000000101004b00000a970000613d000000000001042d000000400100043d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000aac002104210000000102000039000000000001042d0000000002000019000000000001042d00000ab1002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab6002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab80000043200000ab90001042e00000aba00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000546f6f206d616e79204c322d3e4c31206c6f677300000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000918be26e3402038993f44a7d3e3c4373187a68986a393c0b39192bb13d9ba4c6", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/L2EthToken.json b/src/deps/contracts/L2EthToken.json index dbec0297..49a982e3 100644 --- a/src/deps/contracts/L2EthToken.json +++ b/src/deps/contracts/L2EthToken.json @@ -247,8 +247,8 @@ "type": "function" } ], - "bytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000d66663aa2f1a51969904494bc8c42be4574698831eca2f0bbb8a72fbcf00d2d7", - "deployedBytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000d66663aa2f1a51969904494bc8c42be4574698831eca2f0bbb8a72fbcf00d2d7", + "bytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000000000000000000000000000007b3ba959bf7eac2739d6ef137ed2b810585c27a9dbd1782f8efe2a761831b7e4", + "deployedBytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000000000000000000000000000007b3ba959bf7eac2739d6ef137ed2b810585c27a9dbd1782f8efe2a761831b7e4", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/MsgValueSimulator.json b/src/deps/contracts/MsgValueSimulator.json index c0f0e773..b669931c 100644 --- a/src/deps/contracts/MsgValueSimulator.json +++ b/src/deps/contracts/MsgValueSimulator.json @@ -8,8 +8,8 @@ "type": "fallback" } ], - "bytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c66000002e4ced3a84efd977ea0cd094834155e696aecd7aa7fbacd8924e90521dff9c0", - "deployedBytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c66000002e4ced3a84efd977ea0cd094834155e696aecd7aa7fbacd8924e90521dff9c0", + "bytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c660000d44067f635588b53489f404b01f1d63a7a4aad6d0e7bbd1ac391aa57401c3dc1", + "deployedBytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c660000d44067f635588b53489f404b01f1d63a7a4aad6d0e7bbd1ac391aa57401c3dc1", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/NonceHolder.json b/src/deps/contracts/NonceHolder.json index 36bfe503..cf484dff 100644 --- a/src/deps/contracts/NonceHolder.json +++ b/src/deps/contracts/NonceHolder.json @@ -221,8 +221,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001030010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002100000413d0000000301000367000000000101043b000000e001100270000001050210009c000000460000213d0000010c0210009c000000720000a13d0000010d0210009c000001830000613d0000010e0210009c000001b40000613d0000010f0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d0000002001000039000001000010044300000120000004430000010401000041000004060001042e000001060210009c000000a90000a13d000001070210009c000001db0000613d000001080210009c000001ff0000613d000001090110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a0000008001100270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000001100210009c000000cc0000613d000001110110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000301043b000001130130009c000002100000213d000000000100041100000002020000390000000202200188000000920000c13d0000ffff0210008c000002180000213d000080060110008c0000028b0000c13d0000000000300435000000200000043f0000000001000019000600000003001d040503800000040f000000000101041a000500000001001d0000000601000029040503920000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000010a0210009c0000013a0000613d0000010b0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d040503a20000040f000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e80000c13d000001210130009c000002180000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000113023001970000000401400039000100000002001d000000000021043500000103010000410000000002000414000001030320009c0000000002018019000001030340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040504000000040f000000060a000029000000000301001900000060033002700000010303300197000000400430008c000000400400003900000000040340190000001f0540018f0000000506400272000001130000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002650000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c000001340000213d0000000102200190000001340000c13d000000400010043f000000400230008c000002100000413d000001250210009c000002cf0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000600310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003010003670000000402100370000000000402043b000001130240009c000002100000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002100000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039000500000004001d040504000000040f00000005030000290000000102200190000002100000613d000000000101043b000000000101041a00000116011001970000000402000029000000000121004b000002ab0000a13d0000000601000029000000000101004b000002cd0000c13d000000400200043d000600000002001d000001180100004100000000001204350000000401200039040503f10000040f000000060400002900000000014100490000010302000041000001030310009c0000000001028019000001030340009c000000000204401900000040022002100000006001100210000000000121019f00000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000201043b000000020100003900000002011001880000019d0000c13d00000000010004110000ffff0110008c000002180000213d0000011b0120009c0000024d0000413d000000400100043d00000064021000390000011c03000041000000000032043500000044021000390000011d030000410000000000320435000000240210003900000030030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c700000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000100041100000000001004350000000101000039000000200010043f0000000001000019040503800000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003020003670000000401200370000000000101043b000001130310009c000002100000213d0000002402200370000000000202043b040503b50000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002120000613d000000000100001900000407000104300000000002000411000000020100003900000002011001880000022d0000c13d0000ffff0120008c0000022d0000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c70000040700010430000600000002001d0000000000200435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011603100197000000000223004b000002990000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d0000000001000019040503800000040f0000000602000029000000000021041b0000000001000019000004060001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d040503800000040f000000000101041a000400000001001d0000000501000029040503920000040f000000060200002900000004030000290000000002230019000000000021041b0000011601300197000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000000400200043d0000001f0430018f0000000503300272000002720000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000026a0000413d000000000504004b000002810000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000103010000410000000103000031000001030430009c0000000003018019000001030420009c000000000102401900000040011002100000006002300210000000000112019f0000040700010430000000400100043d00000118020000410000000000210435000000040210003900000020030000390000000000320435000000240210003900000000000204350000010302000041000001030310009c000000000102801900000040011002100000011f011001c70000040700010430000000400100043d00000044021000390000011703000041000000000032043500000024021000390000000f030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000000003004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000004020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000016f0000c13d0000000601000029000000000101004b000002ef0000c13d0000000001000019000004060001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002100000213d000000000221043600000005010000290000000001010433000000010310008c000002100000213d00000000001204350000000402000029000000000202004b000003010000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000400100043d00000044021000390000011a03000041000000000032043500000024021000390000001d030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000000101004b0000031b0000c13d0000000301000029000000000101004b0000031b0000613d00000001010000290000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011601100197000600000002001d000000000121004b0000034f0000a13d000000020100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000003020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040503fb0000040f0000000101200190000002100000613d000002cd0000013d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000006020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000031b0000c13d000000400100043d00000044021000390000012603000041000000000032043500000118020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000115011001c70000801002000039040504000000040f0000000102200190000003900000613d000000000101043b000000000001042d000000000100001900000407000104300000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003a00000613d000000000101043b000000000001042d0000000001000019000004070001043000000113011001970000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003b30000613d000000000101043b000000000101041a0000011601100197000000000001042d000000000100001900000407000104300002000000000002000200000002001d0000011301100197000100000001001d0000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d0000000102000039000000000101043b000000000101041a00000116011001970000000203000029000000000131004b000003ed0000213d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b00000002020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004070001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fe002104210000000102000039000000000001042d0000000002000019000000000001042d00000403002104230000000102000039000000000001042d0000000002000019000000000001042d0000040500000432000004060001042e0000040700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000ae0aa7d52bb8b176ababb741c4aa3f8493df606c18d25ef5ed85ca7ff1adbd96", - "deployedBytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001030010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002100000413d0000000301000367000000000101043b000000e001100270000001050210009c000000460000213d0000010c0210009c000000720000a13d0000010d0210009c000001830000613d0000010e0210009c000001b40000613d0000010f0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d0000002001000039000001000010044300000120000004430000010401000041000004060001042e000001060210009c000000a90000a13d000001070210009c000001db0000613d000001080210009c000001ff0000613d000001090110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a0000008001100270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000001100210009c000000cc0000613d000001110110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000301043b000001130130009c000002100000213d000000000100041100000002020000390000000202200188000000920000c13d0000ffff0210008c000002180000213d000080060110008c0000028b0000c13d0000000000300435000000200000043f0000000001000019000600000003001d040503800000040f000000000101041a000500000001001d0000000601000029040503920000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000010a0210009c0000013a0000613d0000010b0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d040503a20000040f000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e80000c13d000001210130009c000002180000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000113023001970000000401400039000100000002001d000000000021043500000103010000410000000002000414000001030320009c0000000002018019000001030340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040504000000040f000000060a000029000000000301001900000060033002700000010303300197000000400430008c000000400400003900000000040340190000001f0540018f0000000506400272000001130000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002650000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c000001340000213d0000000102200190000001340000c13d000000400010043f000000400230008c000002100000413d000001250210009c000002cf0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000600310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003010003670000000402100370000000000402043b000001130240009c000002100000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002100000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039000500000004001d040504000000040f00000005030000290000000102200190000002100000613d000000000101043b000000000101041a00000116011001970000000402000029000000000121004b000002ab0000a13d0000000601000029000000000101004b000002cd0000c13d000000400200043d000600000002001d000001180100004100000000001204350000000401200039040503f10000040f000000060400002900000000014100490000010302000041000001030310009c0000000001028019000001030340009c000000000204401900000040022002100000006001100210000000000121019f00000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000201043b000000020100003900000002011001880000019d0000c13d00000000010004110000ffff0110008c000002180000213d0000011b0120009c0000024d0000413d000000400100043d00000064021000390000011c03000041000000000032043500000044021000390000011d030000410000000000320435000000240210003900000030030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c700000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000100041100000000001004350000000101000039000000200010043f0000000001000019040503800000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003020003670000000401200370000000000101043b000001130310009c000002100000213d0000002402200370000000000202043b040503b50000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002120000613d000000000100001900000407000104300000000002000411000000020100003900000002011001880000022d0000c13d0000ffff0120008c0000022d0000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c70000040700010430000600000002001d0000000000200435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011603100197000000000223004b000002990000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d0000000001000019040503800000040f0000000602000029000000000021041b0000000001000019000004060001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d040503800000040f000000000101041a000400000001001d0000000501000029040503920000040f000000060200002900000004030000290000000002230019000000000021041b0000011601300197000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000000400200043d0000001f0430018f0000000503300272000002720000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000026a0000413d000000000504004b000002810000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000103010000410000000103000031000001030430009c0000000003018019000001030420009c000000000102401900000040011002100000006002300210000000000112019f0000040700010430000000400100043d00000118020000410000000000210435000000040210003900000020030000390000000000320435000000240210003900000000000204350000010302000041000001030310009c000000000102801900000040011002100000011f011001c70000040700010430000000400100043d00000044021000390000011703000041000000000032043500000024021000390000000f030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000000003004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000004020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000016f0000c13d0000000601000029000000000101004b000002ef0000c13d0000000001000019000004060001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002100000213d000000000221043600000005010000290000000001010433000000010310008c000002100000213d00000000001204350000000402000029000000000202004b000003010000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000400100043d00000044021000390000011a03000041000000000032043500000024021000390000001d030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000000101004b0000031b0000c13d0000000301000029000000000101004b0000031b0000613d00000001010000290000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011601100197000600000002001d000000000121004b0000034f0000a13d000000020100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000003020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040503fb0000040f0000000101200190000002100000613d000002cd0000013d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000006020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000031b0000c13d000000400100043d00000044021000390000012603000041000000000032043500000118020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000115011001c70000801002000039040504000000040f0000000102200190000003900000613d000000000101043b000000000001042d000000000100001900000407000104300000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003a00000613d000000000101043b000000000001042d0000000001000019000004070001043000000113011001970000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003b30000613d000000000101043b000000000101041a0000011601100197000000000001042d000000000100001900000407000104300002000000000002000200000002001d0000011301100197000100000001001d0000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d0000000102000039000000000101043b000000000101041a00000116011001970000000203000029000000000131004b000003ed0000213d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b00000002020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004070001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fe002104210000000102000039000000000001042d0000000002000019000000000001042d00000403002104230000000102000039000000000001042d0000000002000019000000000001042d0000040500000432000004060001042e0000040700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000ae0aa7d52bb8b176ababb741c4aa3f8493df606c18d25ef5ed85ca7ff1adbd96", + "bytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001020010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002080000413d0000000301000367000000000101043b000000e001100270000001040210009c000000460000213d0000010b0210009c000000720000a13d0000010c0210009c0000017b0000613d0000010d0210009c000001ac0000613d0000010e0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d0000002001000039000001000010044300000120000004430000010301000041000004050001042e000001050210009c000000a10000a13d000001060210009c000001d30000613d000001070210009c000001f70000613d000001080110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a0000008001100270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000010f0210009c000000c40000613d000001100110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000002000411000080060220008c0000025d0000c13d000600000001001d040403910000040f000000000101041a000500000001001d0000000601000029040403910000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000001090210009c000001320000613d0000010a0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d040403a10000040f000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e00000c13d000001210130009c000002100000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000112023001970000000401400039000100000002001d000000000021043500000102010000410000000002000414000001020320009c0000000002018019000001020340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040403ff0000040f000000060a000029000000000301001900000060033002700000010203300197000000400430008c000000400400003900000000040340190000001f0540018f00000005064002720000010b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001030000413d000000000705004b0000011a0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002720000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c0000012c0000213d00000001022001900000012c0000c13d000000400010043f000000400230008c000002080000413d000001250210009c000002ce0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000600310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003010003670000000402100370000000000402043b000001120240009c000002080000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002080000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039000500000004001d040403ff0000040f00000005030000290000000102200190000002080000613d000000000101043b000000000101041a00000115011001970000000402000029000000000121004b000002aa0000a13d0000000601000029000000000101004b000002cc0000c13d000000400200043d000600000002001d000001170100004100000000001204350000000401200039040403f00000040f000000060400002900000000014100490000010202000041000001020310009c0000000001028019000001020340009c000000000204401900000040022002100000006001100210000000000121019f00000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000201043b00000002010000390000000201100188000001950000c13d00000000010004110000ffff0110008c000002100000213d0000011a0120009c000002450000413d000000400100043d00000064021000390000011b03000041000000000032043500000044021000390000011c030000410000000000320435000000240210003900000030030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c700000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000100041100000000001004350000000101000039000000200010043f00000000010000190404037f0000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003020003670000000401200370000000000101043b000001120310009c000002080000213d0000002402200370000000000202043b040403b40000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b0000020a0000613d00000000010000190000040600010430000000000200041100000002010000390000000201100188000002250000c13d0000ffff0120008c000002250000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000600000002001d0000000000200435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011503100197000000000223004b000002980000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d00000000010000190404037f0000040f0000000602000029000000000021041b0000000001000019000004050001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d0404037f0000040f000000000101041a000400000001001d0000000501000029040403910000040f000000060200002900000004030000290000000002230019000000000021041b0000011501300197000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000000400100043d00000064021000390000011e03000041000000000032043500000044021000390000011f03000041000000000032043500000024021000390000003d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000000400200043d0000001f0430018f00000005033002720000027f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000002770000413d000000000504004b0000028e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000102010000410000000103000031000001020430009c0000000003018019000001020420009c000000000102401900000040011002100000006002300210000000000112019f0000040600010430000000400100043d00000044021000390000011603000041000000000032043500000024021000390000000f030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000000003004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000004020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b000001670000c13d0000000601000029000000000101004b000002ee0000c13d0000000001000019000004050001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002080000213d000000000221043600000005010000290000000001010433000000010310008c000002080000213d00000000001204350000000402000029000000000202004b000003000000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000400100043d00000044021000390000011903000041000000000032043500000024021000390000001d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000000101004b0000031a0000c13d0000000301000029000000000101004b0000031a0000613d00000001010000290000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011501100197000600000002001d000000000121004b0000034e0000a13d000000020100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000003020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040403fa0000040f0000000101200190000002080000613d000002cc0000013d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000006020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b0000031a0000c13d000000400100043d00000044021000390000012603000041000000000032043500000117020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000114011001c70000801002000039040403ff0000040f00000001022001900000038f0000613d000000000101043b000000000001042d000000000100001900000406000104300000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f00000001022001900000039f0000613d000000000101043b000000000001042d0000000001000019000004060001043000000112011001970000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003b20000613d000000000101043b000000000101041a0000011501100197000000000001042d000000000100001900000406000104300002000000000002000200000002001d0000011201100197000100000001001d0000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d0000000102000039000000000101043b000000000101041a00000115011001970000000203000029000000000131004b000003ec0000213d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b00000002020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004060001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fd002104210000000102000039000000000001042d0000000002000019000000000001042d00000402002104230000000102000039000000000001042d0000000002000019000000000001042d0000040400000432000004050001042e0000040600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000006e6372656d656e7420746865206465706c6f796d656e74206e6f6e63650000004f6e6c792074686520636f6e7472616374206465706c6f7965722063616e2069000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000501c26608344a09e93fd75d75fa0338d79ed540145d531243c88c8adba134376", + "deployedBytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001020010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002080000413d0000000301000367000000000101043b000000e001100270000001040210009c000000460000213d0000010b0210009c000000720000a13d0000010c0210009c0000017b0000613d0000010d0210009c000001ac0000613d0000010e0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d0000002001000039000001000010044300000120000004430000010301000041000004050001042e000001050210009c000000a10000a13d000001060210009c000001d30000613d000001070210009c000001f70000613d000001080110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a0000008001100270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000010f0210009c000000c40000613d000001100110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000002000411000080060220008c0000025d0000c13d000600000001001d040403910000040f000000000101041a000500000001001d0000000601000029040403910000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000001090210009c000001320000613d0000010a0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d040403a10000040f000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e00000c13d000001210130009c000002100000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000112023001970000000401400039000100000002001d000000000021043500000102010000410000000002000414000001020320009c0000000002018019000001020340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040403ff0000040f000000060a000029000000000301001900000060033002700000010203300197000000400430008c000000400400003900000000040340190000001f0540018f00000005064002720000010b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001030000413d000000000705004b0000011a0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002720000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c0000012c0000213d00000001022001900000012c0000c13d000000400010043f000000400230008c000002080000413d000001250210009c000002ce0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000600310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003010003670000000402100370000000000402043b000001120240009c000002080000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002080000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039000500000004001d040403ff0000040f00000005030000290000000102200190000002080000613d000000000101043b000000000101041a00000115011001970000000402000029000000000121004b000002aa0000a13d0000000601000029000000000101004b000002cc0000c13d000000400200043d000600000002001d000001170100004100000000001204350000000401200039040403f00000040f000000060400002900000000014100490000010202000041000001020310009c0000000001028019000001020340009c000000000204401900000040022002100000006001100210000000000121019f00000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000201043b00000002010000390000000201100188000001950000c13d00000000010004110000ffff0110008c000002100000213d0000011a0120009c000002450000413d000000400100043d00000064021000390000011b03000041000000000032043500000044021000390000011c030000410000000000320435000000240210003900000030030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c700000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000100041100000000001004350000000101000039000000200010043f00000000010000190404037f0000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003020003670000000401200370000000000101043b000001120310009c000002080000213d0000002402200370000000000202043b040403b40000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b0000020a0000613d00000000010000190000040600010430000000000200041100000002010000390000000201100188000002250000c13d0000ffff0120008c000002250000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000600000002001d0000000000200435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011503100197000000000223004b000002980000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d00000000010000190404037f0000040f0000000602000029000000000021041b0000000001000019000004050001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d0404037f0000040f000000000101041a000400000001001d0000000501000029040403910000040f000000060200002900000004030000290000000002230019000000000021041b0000011501300197000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000000400100043d00000064021000390000011e03000041000000000032043500000044021000390000011f03000041000000000032043500000024021000390000003d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000000400200043d0000001f0430018f00000005033002720000027f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000002770000413d000000000504004b0000028e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000102010000410000000103000031000001020430009c0000000003018019000001020420009c000000000102401900000040011002100000006002300210000000000112019f0000040600010430000000400100043d00000044021000390000011603000041000000000032043500000024021000390000000f030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000000003004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000004020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b000001670000c13d0000000601000029000000000101004b000002ee0000c13d0000000001000019000004050001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002080000213d000000000221043600000005010000290000000001010433000000010310008c000002080000213d00000000001204350000000402000029000000000202004b000003000000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000400100043d00000044021000390000011903000041000000000032043500000024021000390000001d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000000101004b0000031a0000c13d0000000301000029000000000101004b0000031a0000613d00000001010000290000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011501100197000600000002001d000000000121004b0000034e0000a13d000000020100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000003020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040403fa0000040f0000000101200190000002080000613d000002cc0000013d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000006020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b0000031a0000c13d000000400100043d00000044021000390000012603000041000000000032043500000117020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000114011001c70000801002000039040403ff0000040f00000001022001900000038f0000613d000000000101043b000000000001042d000000000100001900000406000104300000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f00000001022001900000039f0000613d000000000101043b000000000001042d0000000001000019000004060001043000000112011001970000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003b20000613d000000000101043b000000000101041a0000011501100197000000000001042d000000000100001900000406000104300002000000000002000200000002001d0000011201100197000100000001001d0000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d0000000102000039000000000101043b000000000101041a00000115011001970000000203000029000000000131004b000003ec0000213d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b00000002020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004060001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fd002104210000000102000039000000000001042d0000000002000019000000000001042d00000402002104230000000102000039000000000001042d0000000002000019000000000001042d0000040400000432000004050001042e0000040600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000006e6372656d656e7420746865206465706c6f796d656e74206e6f6e63650000004f6e6c792074686520636f6e7472616374206465706c6f7965722063616e2069000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000501c26608344a09e93fd75d75fa0338d79ed540145d531243c88c8adba134376", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/SHA256.yul.zbin b/src/deps/contracts/SHA256.yul.zbin index 2d3dcb4d5cc7992e097169024388040918a9c08a..81eea3d792476ddc02b456e36d3ca24c8b33b94a 100644 GIT binary patch delta 309 zcmZ3$`hZn{fq{XMNr7P=J+HfvE^c3rzH}7vyAMaI^(- z7}!`Cyn&S5#5w7VLX%k-{p*E+27uJFF$yph0O+2u6d5>74rEfA{D6^dvH}y!B&G(15SdH? i|5Hy6xGvVR+QDym{YG$o$LZwPp=)kDJbZeWlsN!ofh{@! delta 264 zcmaFBx`0)Ifq{XMNr7} diff --git a/src/deps/contracts/SystemContext.json b/src/deps/contracts/SystemContext.json index cd766149..35112544 100644 --- a/src/deps/contracts/SystemContext.json +++ b/src/deps/contracts/SystemContext.json @@ -402,8 +402,8 @@ "type": "function" } ], - "bytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001dc0010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001e00320009c0000004a0000213d000001f20320009c000000580000a13d000001f30120009c000000b10000a13d000001f40120009c0000013d0000213d000001f70120009c0000019d0000613d000001f80120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020501100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000001dc010000410000000302000039000000000012041b0000000401000039000000000201041a000001dd0220019700008001022001bf000000000021041b000001de010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001df010000410000076c0001042e000001e10120009c0000008b0000a13d000001e20120009c000000d20000a13d000001e30120009c0000017e0000213d000001e60120009c000001b80000613d000001e70120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001fc0320009c000000f50000213d000002000320009c000001d60000613d000002010320009c0000022a0000613d000002020120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b0000004004200039000000000034043500000040030000390000000000320435000002130320009c000004530000213d0000006003200039000000400030043f0000000002020433000600000005001d076b062b0000040f0000000602000029000000000012041b00000000010000190000076c0001042e000001eb0120009c0000011a0000213d000001ef0120009c000002840000613d000001f00120009c000002880000613d000001f10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b06800000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e000001f90120009c000002a40000613d000001fa0120009c000002c00000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001e80120009c000002dc0000613d000001e90120009c000002f80000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000076c0001042e000001fd0120009c0000031c0000613d000001fe0120009c000003370000613d000001ff0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000001ec0120009c000003600000613d000001ed0120009c0000037c0000613d000001ee0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f00000205022001970000008001100210000000000121019f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001f50120009c000003960000613d000001f60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002080320009c000004530000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000205034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b0000000005000019000004800000a13d0000000005160049000001010550008c0000000005000019000004800000813d00000000020204330000020502200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b000000000501041a000004800000013d000001e40120009c000003d90000613d000001e50120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000800310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002050220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002050110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d000002320250009c000004530000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000205022001970000000000250435000400000004001d000000000224004b000004590000a13d000300000001001d076b06930000040f0000000502000029000000000121013f000002050110019800000000010000190000000101006039076b072f0000040f0000000401000029076b07470000040f0000000301000029076b071d0000040f0000000602000029000000000021041b0000000301000029076b06930000040f000500000001001d076b06610000040f000000050200002900000205022001970000002003100039000000000023043500000004020000290000000000210435076b06b30000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000076c0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a00000000022000310000020303000041000000a00420008c000000000400001900000000040340190000020302200197000000000502004b000000000300a019000002030220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002050220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002050220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002050330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004880000c13d000000400400043d000002080340009c000004530000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020506500197000200000006001d0000000000640435000002050450009c000004c10000213d0000000204000029000000000404004b000004c70000c13d000000000102004b000005520000c13d000000400100043d0000006402100039000002300300004100000000003204350000004402100039000002310300004100000000003204350000002402100039000000210300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000010e01000039000000000201041a0000021202200197000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002070110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000000101000039000000000201041a000001dd022001970000000603000029000000000232019f000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000600310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f000000400100043d076b06560000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020501100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400200043d0000000001000411000080010110008c000004100000c13d000002080120009c000004530000213d0000004001200039000000400010043f0000000701000039000000000301041a00000020042000390000008001300270000000000014043500000205073001970000000000720435000000400200043d000002080420009c000004530000213d0000004004200039000000400040043f0000000904000039000000000404041a00000020052000390000008006400270000000000065043500000205044001970000000000420435000002050230009c000004410000213d000000400100043d00000064021000390000020f03000041000000000032043500000044021000390000021003000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000076d0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019076b062b0000040f000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d0001043000000044012000390000020c03000041000000000031043500000024012000390000001f0300003900000000003104350000020d010000410000000000120435000000040120003900000020030000390000000000310435000001dc01000041000001dc0320009c000000000102401900000040011002100000020e011001c70000076d0001043000000212022001970000000103300039000000000223019f000000000021041b00000000010000190000076c0001042e000002090240009c0000044d0000413d000000000231004b0000044d0000413d000001012110011a0000000b01200039000000000501041a000004800000013d00000044025000390000020c03000041000000000032043500000024025000390000001f0300003900000000003204350000020d020000410000000000250435000000040250003900000020030000390000000000320435000001dc02000041000001dc0350009c0000000001020019000000000105401900000040011002100000020e011001c70000076d00010430000500000007001d000600000004001d076b06a80000040f076b071d0000040f000000050100002900000080011002100000000602000029000000000112019f0000000302000039000000000012041c00000000010000190000076c0001042e000000400200043d000000200300003900000000033204360000000000130435000002080120009c0000046a0000a13d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000004402100039000002330300004100000000003204350000020d02000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d000104300000004001200039000000400010043f000001dc01000041000001dc0430009c000000000301801900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000703000039000000000303041a00000205033001970000000504000029000000000334004b000004a90000813d000000400100043d000000a402100039000002160300004100000000003204350000008402100039000002170300004100000000003204350000006402100039000002180300004100000000003204350000004402100039000002190300004100000000003204350000002402100039000000610300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000021a011001c70000076d000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000003f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000604000029000000000443004b000004ca0000613d000002050230009c000004f30000c13d000001140000013d0000000604000029000000000443004b000004f30000c13d000000000102004b0000053d0000c13d00000005010000290000000202000029000000000112004b0000057b0000c13d0000000601000029000000010110008a000002050210009c000001140000213d0000020501100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005d50000c13d0000000301000029000000000101004b000005cf0000613d000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000003c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000001023000390000000604000029000000000242004b0000056a0000c13d000000010230008a000002050420009c000001140000213d0000020502200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d00000080062000390000000000560435000000600520003900000000004504350000004004200039000000020500002900000000005404350000002004200039000000000034043500000000001204350000021b0120009c000004530000213d000000a001200039000000400010043f000001dc01000041000001dc0340009c0000000003010019000000000304401900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005ea0000c13d000000400100043d00000005020000290000000203000029000000000232004b000006140000a13d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002050210009c000001140000213d000005c80000013d000000400100043d0000006402100039000002220300004100000000003204350000004402100039000002230300004100000000003204350000002402100039000000350300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000601000029000000000101004b000005900000c13d000000400100043d00000064021000390000022e03000041000000000032043500000044021000390000022f03000041000000000032043500000024021000390000002c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400200043d000600000002001d0000020d0100004100000000001204350000000401200039076b069e0000040f00000006040000290000000001410049000001dc02000041000001dc0310009c0000000001028019000001dc0340009c000000000204401900000040022002100000006001100210000000000121019f0000076d00010430000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d0000000402000039000000000221043600000006030000290000020503300041000200000003001d000000e0033002100000000000320435000002080310009c000004530000213d0000004003100039000000400030043f000001dc03000041000001dc0420009c000000000203801900000040022002100000000001010433000001dc0410009c00000000010380190000006001100210000000000121019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005ff0000c13d00000002010000290000020501100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020501100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029076b06bb0000040f00000000010000190000076c0001042e000000400100043d0000006402100039000002260300004100000000003204350000004402100039000002270300004100000000003204350000002402100039000000330300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000021c03000041000000000032043500000044021000390000021d0300004100000000003204350000002402100039000000260300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d0300004100000000003204350000002402100039000000270300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000084021000390000021e03000041000000000032043500000064021000390000021f03000041000000000032043500000044021000390000022003000041000000000032043500000024021000390000005d0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d00010430000001dc03000041000001dc0410009c00000000010380190000004001100210000001dc0420009c00000000020380190000006002200210000000000112019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f00000001022001900000063f0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000006440000613d000000000001042d000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d00010430000002320210009c0000065b0000813d0000004001100039000000400010043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d000002320210009c000006670000813d0000004002100039000000400020043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000067a0000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000068d0000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000020501100197000002050210009c000006980000613d0000000101100039000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d0001043000000040021000390000023403000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000020501100197000000010110008a000002090210009c000006ad0000813d000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d000104300000000021010434000002050110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002090550009c000006d30000813d000000400500043d000002320650009c000006fc0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020506700197000000000665043600000080077002700000000000760435000000000808041a000002050880009c000006d00000213d00000000080504330000020508800198000006d60000613d0000020502200198000006e20000c13d000006fb0000013d0000000901000039000000000101041a000006f90000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023508800197000000000778019f000000000074041b0000020502200198000007080000613d0000000007060433000000010220008a00000205077001970000000002270019000002090720009c000007020000813d000000000026043500000205033001970000000000350435000002050210019700000000070604330000020508700197000000000828004b000006f60000413d0000008001100210000000000304041a0000020503300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000205013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000006402100039000002360300004100000000003204350000004402100039000002370300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000002050110019700000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f00000001022001900000072d0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000007320000613d000000000001042d000000400100043d0000006402100039000002380300004100000000003204350000004402100039000002390300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000205011001970000000902000039000000000202041a0000020502200197000000000121004b0000074e0000a13d000000000001042d000000400100043d00000084021000390000023a03000041000000000032043500000064021000390000023b03000041000000000032043500000044021000390000023c0300004100000000003204350000002402100039000000530300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d0001043000000769002104230000000102000039000000000001042d0000000002000019000000000001042d0000076b000004320000076c0001042e0000076d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000001342b6f236eec1b3605966b86908b668ad9c6d9034703df6c6b59c04d81a6fc6", - "deployedBytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001dc0010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001e00320009c0000004a0000213d000001f20320009c000000580000a13d000001f30120009c000000b10000a13d000001f40120009c0000013d0000213d000001f70120009c0000019d0000613d000001f80120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020501100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000001dc010000410000000302000039000000000012041b0000000401000039000000000201041a000001dd0220019700008001022001bf000000000021041b000001de010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001df010000410000076c0001042e000001e10120009c0000008b0000a13d000001e20120009c000000d20000a13d000001e30120009c0000017e0000213d000001e60120009c000001b80000613d000001e70120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001fc0320009c000000f50000213d000002000320009c000001d60000613d000002010320009c0000022a0000613d000002020120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b0000004004200039000000000034043500000040030000390000000000320435000002130320009c000004530000213d0000006003200039000000400030043f0000000002020433000600000005001d076b062b0000040f0000000602000029000000000012041b00000000010000190000076c0001042e000001eb0120009c0000011a0000213d000001ef0120009c000002840000613d000001f00120009c000002880000613d000001f10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b06800000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e000001f90120009c000002a40000613d000001fa0120009c000002c00000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001e80120009c000002dc0000613d000001e90120009c000002f80000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000076c0001042e000001fd0120009c0000031c0000613d000001fe0120009c000003370000613d000001ff0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000001ec0120009c000003600000613d000001ed0120009c0000037c0000613d000001ee0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f00000205022001970000008001100210000000000121019f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001f50120009c000003960000613d000001f60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002080320009c000004530000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000205034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b0000000005000019000004800000a13d0000000005160049000001010550008c0000000005000019000004800000813d00000000020204330000020502200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b000000000501041a000004800000013d000001e40120009c000003d90000613d000001e50120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000800310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002050220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002050110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d000002320250009c000004530000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000205022001970000000000250435000400000004001d000000000224004b000004590000a13d000300000001001d076b06930000040f0000000502000029000000000121013f000002050110019800000000010000190000000101006039076b072f0000040f0000000401000029076b07470000040f0000000301000029076b071d0000040f0000000602000029000000000021041b0000000301000029076b06930000040f000500000001001d076b06610000040f000000050200002900000205022001970000002003100039000000000023043500000004020000290000000000210435076b06b30000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000076c0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a00000000022000310000020303000041000000a00420008c000000000400001900000000040340190000020302200197000000000502004b000000000300a019000002030220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002050220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002050220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002050330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004880000c13d000000400400043d000002080340009c000004530000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020506500197000200000006001d0000000000640435000002050450009c000004c10000213d0000000204000029000000000404004b000004c70000c13d000000000102004b000005520000c13d000000400100043d0000006402100039000002300300004100000000003204350000004402100039000002310300004100000000003204350000002402100039000000210300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000010e01000039000000000201041a0000021202200197000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002070110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000000101000039000000000201041a000001dd022001970000000603000029000000000232019f000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000600310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f000000400100043d076b06560000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020501100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400200043d0000000001000411000080010110008c000004100000c13d000002080120009c000004530000213d0000004001200039000000400010043f0000000701000039000000000301041a00000020042000390000008001300270000000000014043500000205073001970000000000720435000000400200043d000002080420009c000004530000213d0000004004200039000000400040043f0000000904000039000000000404041a00000020052000390000008006400270000000000065043500000205044001970000000000420435000002050230009c000004410000213d000000400100043d00000064021000390000020f03000041000000000032043500000044021000390000021003000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000076d0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019076b062b0000040f000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d0001043000000044012000390000020c03000041000000000031043500000024012000390000001f0300003900000000003104350000020d010000410000000000120435000000040120003900000020030000390000000000310435000001dc01000041000001dc0320009c000000000102401900000040011002100000020e011001c70000076d0001043000000212022001970000000103300039000000000223019f000000000021041b00000000010000190000076c0001042e000002090240009c0000044d0000413d000000000231004b0000044d0000413d000001012110011a0000000b01200039000000000501041a000004800000013d00000044025000390000020c03000041000000000032043500000024025000390000001f0300003900000000003204350000020d020000410000000000250435000000040250003900000020030000390000000000320435000001dc02000041000001dc0350009c0000000001020019000000000105401900000040011002100000020e011001c70000076d00010430000500000007001d000600000004001d076b06a80000040f076b071d0000040f000000050100002900000080011002100000000602000029000000000112019f0000000302000039000000000012041c00000000010000190000076c0001042e000000400200043d000000200300003900000000033204360000000000130435000002080120009c0000046a0000a13d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000004402100039000002330300004100000000003204350000020d02000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d000104300000004001200039000000400010043f000001dc01000041000001dc0430009c000000000301801900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000703000039000000000303041a00000205033001970000000504000029000000000334004b000004a90000813d000000400100043d000000a402100039000002160300004100000000003204350000008402100039000002170300004100000000003204350000006402100039000002180300004100000000003204350000004402100039000002190300004100000000003204350000002402100039000000610300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000021a011001c70000076d000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000003f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000604000029000000000443004b000004ca0000613d000002050230009c000004f30000c13d000001140000013d0000000604000029000000000443004b000004f30000c13d000000000102004b0000053d0000c13d00000005010000290000000202000029000000000112004b0000057b0000c13d0000000601000029000000010110008a000002050210009c000001140000213d0000020501100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005d50000c13d0000000301000029000000000101004b000005cf0000613d000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000003c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000001023000390000000604000029000000000242004b0000056a0000c13d000000010230008a000002050420009c000001140000213d0000020502200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d00000080062000390000000000560435000000600520003900000000004504350000004004200039000000020500002900000000005404350000002004200039000000000034043500000000001204350000021b0120009c000004530000213d000000a001200039000000400010043f000001dc01000041000001dc0340009c0000000003010019000000000304401900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005ea0000c13d000000400100043d00000005020000290000000203000029000000000232004b000006140000a13d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002050210009c000001140000213d000005c80000013d000000400100043d0000006402100039000002220300004100000000003204350000004402100039000002230300004100000000003204350000002402100039000000350300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000601000029000000000101004b000005900000c13d000000400100043d00000064021000390000022e03000041000000000032043500000044021000390000022f03000041000000000032043500000024021000390000002c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400200043d000600000002001d0000020d0100004100000000001204350000000401200039076b069e0000040f00000006040000290000000001410049000001dc02000041000001dc0310009c0000000001028019000001dc0340009c000000000204401900000040022002100000006001100210000000000121019f0000076d00010430000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d0000000402000039000000000221043600000006030000290000020503300041000200000003001d000000e0033002100000000000320435000002080310009c000004530000213d0000004003100039000000400030043f000001dc03000041000001dc0420009c000000000203801900000040022002100000000001010433000001dc0410009c00000000010380190000006001100210000000000121019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005ff0000c13d00000002010000290000020501100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020501100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029076b06bb0000040f00000000010000190000076c0001042e000000400100043d0000006402100039000002260300004100000000003204350000004402100039000002270300004100000000003204350000002402100039000000330300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000021c03000041000000000032043500000044021000390000021d0300004100000000003204350000002402100039000000260300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d0300004100000000003204350000002402100039000000270300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000084021000390000021e03000041000000000032043500000064021000390000021f03000041000000000032043500000044021000390000022003000041000000000032043500000024021000390000005d0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d00010430000001dc03000041000001dc0410009c00000000010380190000004001100210000001dc0420009c00000000020380190000006002200210000000000112019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f00000001022001900000063f0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000006440000613d000000000001042d000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d00010430000002320210009c0000065b0000813d0000004001100039000000400010043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d000002320210009c000006670000813d0000004002100039000000400020043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000067a0000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000068d0000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000020501100197000002050210009c000006980000613d0000000101100039000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d0001043000000040021000390000023403000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000020501100197000000010110008a000002090210009c000006ad0000813d000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d000104300000000021010434000002050110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002090550009c000006d30000813d000000400500043d000002320650009c000006fc0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020506700197000000000665043600000080077002700000000000760435000000000808041a000002050880009c000006d00000213d00000000080504330000020508800198000006d60000613d0000020502200198000006e20000c13d000006fb0000013d0000000901000039000000000101041a000006f90000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023508800197000000000778019f000000000074041b0000020502200198000007080000613d0000000007060433000000010220008a00000205077001970000000002270019000002090720009c000007020000813d000000000026043500000205033001970000000000350435000002050210019700000000070604330000020508700197000000000828004b000006f60000413d0000008001100210000000000304041a0000020503300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000205013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000006402100039000002360300004100000000003204350000004402100039000002370300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000002050110019700000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f00000001022001900000072d0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000007320000613d000000000001042d000000400100043d0000006402100039000002380300004100000000003204350000004402100039000002390300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000205011001970000000902000039000000000202041a0000020502200197000000000121004b0000074e0000a13d000000000001042d000000400100043d00000084021000390000023a03000041000000000032043500000064021000390000023b03000041000000000032043500000044021000390000023c0300004100000000003204350000002402100039000000530300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d0001043000000769002104230000000102000039000000000001042d0000000002000019000000000001042d0000076b000004320000076c0001042e0000076d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000001342b6f236eec1b3605966b86908b668ad9c6d9034703df6c6b59c04d81a6fc6", + "bytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001d80010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001dc0320009c0000004a0000213d000001ee0320009c000000580000a13d000001ef0120009c000000b10000a13d000001f00120009c0000013d0000213d000001f30120009c0000019d0000613d000001f40120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020101100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000001d8010000410000000302000039000000000012041b0000000401000039000000000201041a000001d90220019700008001022001bf000000000021041b000001da010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001db010000410000075b0001042e000001dd0120009c0000008b0000a13d000001de0120009c000000d20000a13d000001df0120009c0000017e0000213d000001e20120009c000001b80000613d000001e30120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001f80320009c000000f50000213d000001fc0320009c000001d60000613d000001fd0320009c0000022a0000613d000001fe0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b00000040042000390000000000340435000000400300003900000000003204350000020f0320009c0000044d0000213d0000006003200039000000400030043f0000000002020433000600000005001d075a06250000040f0000000602000029000000000012041b00000000010000190000075b0001042e000001e70120009c0000011a0000213d000001eb0120009c000002840000613d000001ec0120009c000002880000613d000001ed0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a067a0000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e000001f50120009c000002a40000613d000001f60120009c000002c00000613d000001f70120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001e40120009c000002dc0000613d000001e50120009c000002f80000613d000001e60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000075b0001042e000001f90120009c0000031c0000613d000001fa0120009c000003370000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000001e80120009c000003600000613d000001e90120009c0000037c0000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f00000201022001970000008001100210000000000121019f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001f10120009c000003960000613d000001f20120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002040320009c0000044d0000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000201034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b00000000050000190000047a0000a13d0000000005160049000001010550008c00000000050000190000047a0000813d00000000020204330000020102200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b000000000501041a0000047a0000013d000001e00120009c000003d90000613d000001e10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000800310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002010220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002010110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d0000022e0250009c0000044d0000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000201022001970000000000250435000400000004001d000000000224004b000004530000a13d000300000001001d075a068d0000040f0000000502000029000000000121013f000002010110019800000000010000190000000101006039075a070c0000040f0000000401000029075a07360000040f0000000301000029075a07240000040f0000000602000029000000000021041b0000000301000029075a068d0000040f000500000001001d075a065b0000040f000000050200002900000201022001970000002003100039000000000023043500000004020000290000000000210435075a06a20000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000075b0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a0000000002200031000001ff03000041000000a00420008c00000000040000190000000004034019000001ff02200197000000000502004b000000000300a019000001ff0220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002010220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002010220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002010330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004820000c13d000000400400043d000002040340009c0000044d0000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020106500197000200000006001d0000000000640435000002010450009c000004bb0000213d0000000204000029000000000404004b000004c10000c13d000000000102004b0000054c0000c13d000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d03000041000000000032043500000024021000390000002103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000010e01000039000000000201041a0000020e02200197000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002030110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000000101000039000000000201041a000001d9022001970000000603000029000000000232019f000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000600310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f000000400100043d075a06500000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020101100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d0000000002000411000080010220008c000004100000c13d000002040210009c0000044d0000213d0000004002100039000000400020043f0000000702000039000000000202041a00000020031000390000008004200270000000000043043500000201032001970000000000310435000000400100043d000002040410009c0000044d0000213d0000004004100039000000400040043f0000000904000039000000000404041a00000020051000390000008006400270000000000065043500000201044001970000000000410435000002010120009c000004410000213d000000400100043d00000064021000390000020b03000041000000000032043500000044021000390000020c03000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000075c0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019075a06250000040f000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c0001043000000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000020e022001970000000103300039000000000223019f000000000021041b00000000010000190000075b0001042e000002050240009c000004470000413d000000000231004b000004470000413d000001012110011a0000000b01200039000000000501041a0000047a0000013d00000044025000390000020803000041000000000032043500000024025000390000001f03000039000000000032043500000209020000410000000000250435000000040250003900000020030000390000000000320435000001d802000041000001d80350009c0000000001020019000000000105401900000040011002100000020a011001c70000075c000104300000008001300210000000000114019f0000000302000039000000000012041c00000000010000190000075b0001042e000000400200043d000000200300003900000000033204360000000000130435000002040120009c000004640000a13d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d00000044021000390000022f0300004100000000003204350000020902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000004001200039000000400010043f000001d801000041000001d80430009c000000000301801900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000703000039000000000303041a00000201033001970000000504000029000000000334004b000004a30000813d000000400100043d000000a4021000390000021203000041000000000032043500000084021000390000021303000041000000000032043500000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000006103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c0000000001028019000000400110021000000216011001c70000075c000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021003000041000000000032043500000044021000390000021103000041000000000032043500000024021000390000003f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000604000029000000000443004b000004c40000613d000002010230009c000004ed0000c13d000001140000013d0000000604000029000000000443004b000004ed0000c13d000000000102004b000005370000c13d00000005010000290000000202000029000000000112004b000005750000c13d0000000601000029000000010110008a000002010210009c000001140000213d0000020101100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005cf0000c13d0000000301000029000000000101004b000005c90000613d000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000003c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000001023000390000000604000029000000000242004b000005640000c13d000000010230008a000002010420009c000001140000213d0000020102200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d0000008006200039000000000056043500000060052000390000000000450435000000400420003900000002050000290000000000540435000000200420003900000000003404350000000000120435000002170120009c0000044d0000213d000000a001200039000000400010043f000001d801000041000001d80340009c0000000003010019000000000304401900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005e40000c13d000000400100043d00000005020000290000000203000029000000000232004b0000060e0000a13d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002010210009c000001140000213d000005c20000013d000000400100043d00000064021000390000021e03000041000000000032043500000044021000390000021f03000041000000000032043500000024021000390000003503000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000601000029000000000101004b0000058a0000c13d000000400100043d00000064021000390000022a03000041000000000032043500000044021000390000022b03000041000000000032043500000024021000390000002c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400200043d000600000002001d000002090100004100000000001204350000000401200039075a06980000040f00000006040000290000000001410049000001d802000041000001d80310009c0000000001028019000001d80340009c000000000204401900000040022002100000006001100210000000000121019f0000075c00010430000000400100043d00000064021000390000022003000041000000000032043500000044021000390000022103000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d0000000402000039000000000221043600000006030000290000020103300041000200000003001d000000e0033002100000000000320435000002040310009c0000044d0000213d0000004003100039000000400030043f000001d803000041000001d80420009c000000000203801900000040022002100000000001010433000001d80410009c00000000010380190000006001100210000000000121019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005f90000c13d00000002010000290000020101100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020101100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029075a06aa0000040f00000000010000190000075b0001042e000000400100043d00000064021000390000022203000041000000000032043500000044021000390000022303000041000000000032043500000024021000390000003303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000021803000041000000000032043500000044021000390000021903000041000000000032043500000024021000390000002603000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000002703000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000084021000390000021a03000041000000000032043500000064021000390000021b03000041000000000032043500000044021000390000021c03000041000000000032043500000024021000390000005d03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c00010430000001d803000041000001d80410009c00000000010380190000004001100210000001d80420009c00000000020380190000006002200210000000000112019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000006390000613d000000000101043b000000000001042d00000000010000190000075c00010430000000000101004b0000063e0000613d000000000001042d000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000022e0210009c000006550000813d0000004001100039000000400010043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d0000022e0210009c000006610000813d0000004002100039000000400020043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006740000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006870000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c000104300000020101100197000002010210009c000006920000613d0000000101100039000000000001042d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c0001043000000040021000390000023003000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000000021010434000002010110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002050550009c000006c20000813d000000400500043d0000022e0650009c000006eb0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020106700197000000000665043600000080077002700000000000760435000000000808041a000002010880009c000006bf0000213d00000000080504330000020108800198000006c50000613d0000020102200198000006d10000c13d000006ea0000013d0000000901000039000000000101041a000006e80000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023108800197000000000778019f000000000074041b0000020102200198000006f70000613d0000000007060433000000010220008a00000201077001970000000002270019000002050720009c000006f10000813d000000000026043500000201033001970000000000350435000002010210019700000000070604330000020108700197000000000828004b000006e50000413d0000008001100210000000000304041a0000020103300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000201013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000000400100043d00000064021000390000023203000041000000000032043500000044021000390000023303000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000000101004b0000070f0000613d000000000001042d000000400100043d00000064021000390000023403000041000000000032043500000044021000390000023503000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000002010110019700000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000007340000613d000000000101043b000000000001042d00000000010000190000075c0001043000000201011001970000000902000039000000000202041a0000020102200197000000000121004b0000073d0000a13d000000000001042d000000400100043d00000084021000390000023603000041000000000032043500000064021000390000023703000041000000000032043500000044021000390000023803000041000000000032043500000024021000390000005303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c0001043000000758002104230000000102000039000000000001042d0000000002000019000000000001042d0000075a000004320000075b0001042e0000075c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000000be0c6cf64037e617675286e231b21587c8dedaf2b373135e6ddfb43a22f29d2", + "deployedBytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001d80010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001dc0320009c0000004a0000213d000001ee0320009c000000580000a13d000001ef0120009c000000b10000a13d000001f00120009c0000013d0000213d000001f30120009c0000019d0000613d000001f40120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020101100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000001d8010000410000000302000039000000000012041b0000000401000039000000000201041a000001d90220019700008001022001bf000000000021041b000001da010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001db010000410000075b0001042e000001dd0120009c0000008b0000a13d000001de0120009c000000d20000a13d000001df0120009c0000017e0000213d000001e20120009c000001b80000613d000001e30120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001f80320009c000000f50000213d000001fc0320009c000001d60000613d000001fd0320009c0000022a0000613d000001fe0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b00000040042000390000000000340435000000400300003900000000003204350000020f0320009c0000044d0000213d0000006003200039000000400030043f0000000002020433000600000005001d075a06250000040f0000000602000029000000000012041b00000000010000190000075b0001042e000001e70120009c0000011a0000213d000001eb0120009c000002840000613d000001ec0120009c000002880000613d000001ed0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a067a0000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e000001f50120009c000002a40000613d000001f60120009c000002c00000613d000001f70120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001e40120009c000002dc0000613d000001e50120009c000002f80000613d000001e60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000075b0001042e000001f90120009c0000031c0000613d000001fa0120009c000003370000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000001e80120009c000003600000613d000001e90120009c0000037c0000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f00000201022001970000008001100210000000000121019f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001f10120009c000003960000613d000001f20120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002040320009c0000044d0000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000201034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b00000000050000190000047a0000a13d0000000005160049000001010550008c00000000050000190000047a0000813d00000000020204330000020102200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b000000000501041a0000047a0000013d000001e00120009c000003d90000613d000001e10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000800310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002010220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002010110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d0000022e0250009c0000044d0000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000201022001970000000000250435000400000004001d000000000224004b000004530000a13d000300000001001d075a068d0000040f0000000502000029000000000121013f000002010110019800000000010000190000000101006039075a070c0000040f0000000401000029075a07360000040f0000000301000029075a07240000040f0000000602000029000000000021041b0000000301000029075a068d0000040f000500000001001d075a065b0000040f000000050200002900000201022001970000002003100039000000000023043500000004020000290000000000210435075a06a20000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000075b0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a0000000002200031000001ff03000041000000a00420008c00000000040000190000000004034019000001ff02200197000000000502004b000000000300a019000001ff0220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002010220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002010220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002010330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004820000c13d000000400400043d000002040340009c0000044d0000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020106500197000200000006001d0000000000640435000002010450009c000004bb0000213d0000000204000029000000000404004b000004c10000c13d000000000102004b0000054c0000c13d000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d03000041000000000032043500000024021000390000002103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000010e01000039000000000201041a0000020e02200197000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002030110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000000101000039000000000201041a000001d9022001970000000603000029000000000232019f000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000600310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f000000400100043d075a06500000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020101100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d0000000002000411000080010220008c000004100000c13d000002040210009c0000044d0000213d0000004002100039000000400020043f0000000702000039000000000202041a00000020031000390000008004200270000000000043043500000201032001970000000000310435000000400100043d000002040410009c0000044d0000213d0000004004100039000000400040043f0000000904000039000000000404041a00000020051000390000008006400270000000000065043500000201044001970000000000410435000002010120009c000004410000213d000000400100043d00000064021000390000020b03000041000000000032043500000044021000390000020c03000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000075c0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019075a06250000040f000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c0001043000000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000020e022001970000000103300039000000000223019f000000000021041b00000000010000190000075b0001042e000002050240009c000004470000413d000000000231004b000004470000413d000001012110011a0000000b01200039000000000501041a0000047a0000013d00000044025000390000020803000041000000000032043500000024025000390000001f03000039000000000032043500000209020000410000000000250435000000040250003900000020030000390000000000320435000001d802000041000001d80350009c0000000001020019000000000105401900000040011002100000020a011001c70000075c000104300000008001300210000000000114019f0000000302000039000000000012041c00000000010000190000075b0001042e000000400200043d000000200300003900000000033204360000000000130435000002040120009c000004640000a13d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d00000044021000390000022f0300004100000000003204350000020902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000004001200039000000400010043f000001d801000041000001d80430009c000000000301801900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000703000039000000000303041a00000201033001970000000504000029000000000334004b000004a30000813d000000400100043d000000a4021000390000021203000041000000000032043500000084021000390000021303000041000000000032043500000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000006103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c0000000001028019000000400110021000000216011001c70000075c000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021003000041000000000032043500000044021000390000021103000041000000000032043500000024021000390000003f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000604000029000000000443004b000004c40000613d000002010230009c000004ed0000c13d000001140000013d0000000604000029000000000443004b000004ed0000c13d000000000102004b000005370000c13d00000005010000290000000202000029000000000112004b000005750000c13d0000000601000029000000010110008a000002010210009c000001140000213d0000020101100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005cf0000c13d0000000301000029000000000101004b000005c90000613d000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000003c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000001023000390000000604000029000000000242004b000005640000c13d000000010230008a000002010420009c000001140000213d0000020102200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d0000008006200039000000000056043500000060052000390000000000450435000000400420003900000002050000290000000000540435000000200420003900000000003404350000000000120435000002170120009c0000044d0000213d000000a001200039000000400010043f000001d801000041000001d80340009c0000000003010019000000000304401900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005e40000c13d000000400100043d00000005020000290000000203000029000000000232004b0000060e0000a13d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002010210009c000001140000213d000005c20000013d000000400100043d00000064021000390000021e03000041000000000032043500000044021000390000021f03000041000000000032043500000024021000390000003503000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000601000029000000000101004b0000058a0000c13d000000400100043d00000064021000390000022a03000041000000000032043500000044021000390000022b03000041000000000032043500000024021000390000002c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400200043d000600000002001d000002090100004100000000001204350000000401200039075a06980000040f00000006040000290000000001410049000001d802000041000001d80310009c0000000001028019000001d80340009c000000000204401900000040022002100000006001100210000000000121019f0000075c00010430000000400100043d00000064021000390000022003000041000000000032043500000044021000390000022103000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d0000000402000039000000000221043600000006030000290000020103300041000200000003001d000000e0033002100000000000320435000002040310009c0000044d0000213d0000004003100039000000400030043f000001d803000041000001d80420009c000000000203801900000040022002100000000001010433000001d80410009c00000000010380190000006001100210000000000121019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005f90000c13d00000002010000290000020101100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020101100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029075a06aa0000040f00000000010000190000075b0001042e000000400100043d00000064021000390000022203000041000000000032043500000044021000390000022303000041000000000032043500000024021000390000003303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000021803000041000000000032043500000044021000390000021903000041000000000032043500000024021000390000002603000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000002703000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000084021000390000021a03000041000000000032043500000064021000390000021b03000041000000000032043500000044021000390000021c03000041000000000032043500000024021000390000005d03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c00010430000001d803000041000001d80410009c00000000010380190000004001100210000001d80420009c00000000020380190000006002200210000000000112019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000006390000613d000000000101043b000000000001042d00000000010000190000075c00010430000000000101004b0000063e0000613d000000000001042d000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000022e0210009c000006550000813d0000004001100039000000400010043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d0000022e0210009c000006610000813d0000004002100039000000400020043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006740000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006870000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c000104300000020101100197000002010210009c000006920000613d0000000101100039000000000001042d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c0001043000000040021000390000023003000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000000021010434000002010110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002050550009c000006c20000813d000000400500043d0000022e0650009c000006eb0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020106700197000000000665043600000080077002700000000000760435000000000808041a000002010880009c000006bf0000213d00000000080504330000020108800198000006c50000613d0000020102200198000006d10000c13d000006ea0000013d0000000901000039000000000101041a000006e80000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023108800197000000000778019f000000000074041b0000020102200198000006f70000613d0000000007060433000000010220008a00000201077001970000000002270019000002050720009c000006f10000813d000000000026043500000201033001970000000000350435000002010210019700000000070604330000020108700197000000000828004b000006e50000413d0000008001100210000000000304041a0000020103300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000201013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000000400100043d00000064021000390000023203000041000000000032043500000044021000390000023303000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000000101004b0000070f0000613d000000000001042d000000400100043d00000064021000390000023403000041000000000032043500000044021000390000023503000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000002010110019700000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000007340000613d000000000101043b000000000001042d00000000010000190000075c0001043000000201011001970000000902000039000000000202041a0000020102200197000000000121004b0000073d0000a13d000000000001042d000000400100043d00000084021000390000023603000041000000000032043500000064021000390000023703000041000000000032043500000044021000390000023803000041000000000032043500000024021000390000005303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c0001043000000758002104230000000102000039000000000001042d0000000002000019000000000001042d0000075a000004320000075b0001042e0000075c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000000be0c6cf64037e617675286e231b21587c8dedaf2b373135e6ddfb43a22f29d2", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/fee_estimate.yul.zbin b/src/deps/contracts/fee_estimate.yul.zbin index 4ebe221c61f5f87ae9dd37b501c8922ad4a39f7e..dc2e655b741f27cd9d5f76e1d76057acb081c2a3 100644 GIT binary patch literal 79136 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 literal 76896 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 diff --git a/src/deps/contracts/fee_estimate_impersonating.yul.zbin b/src/deps/contracts/fee_estimate_impersonating.yul.zbin index e51f6782e076e144f9e789330c9ea724bdc6ac9b..e287b5bba764e192f519bd49c75e9856952a9589 100644 GIT binary patch literal 78816 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 ZU;fs=xb9
5uM7GC)4ckX$^{|8Gm&%FQu literal 76768 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 AApigX literal 76000 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 diff --git a/src/deps/contracts/playground_batch.yul.zbin b/src/deps/contracts/playground_batch.yul.zbin index c11073928ce3ee7b19d784ed42c1627e804ff19a..f1689858569d6bd3c37111853b93d3e52e8178f2 100644 GIT binary patch literal 79456 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 diff --git a/src/deps/contracts/proved_batch.yul.zbin b/src/deps/contracts/proved_batch.yul.zbin index ebad9bf23a3290eeec98e0bdf6c9d0d6070b2528..bf29553ff303133bd47f5683ae4a6b8aab5eec8a 100644 GIT binary patch literal 79008 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 G_x}N3&53sa diff --git a/src/deps/contracts/proved_batch_impersonating.yul.zbin b/src/deps/contracts/proved_batch_impersonating.yul.zbin index 8a6a2f59e1a9e5bac77834473284ad08d7d33928..1ee63af7c1240783deb3940848fbd19a70b30169 100644 GIT binary patch literal 79520 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 Jc5VB-{|7`6_Cf#v literal 77664 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 q9(YN|#Eqe8oB6y6npDKlqkg{&U6dJN_R=?5*+u diff --git a/src/deps/mod.rs b/src/deps/mod.rs index f6c721bc..2ba82297 100644 --- a/src/deps/mod.rs +++ b/src/deps/mod.rs @@ -68,6 +68,12 @@ impl ReadStorage for &InMemoryStorage { fn load_factory_dep(&mut self, hash: H256) -> Option> { self.factory_deps.get(&hash).cloned() } + + fn get_enumeration_index(&mut self, _key: &StorageKey) -> Option { + // TODO: Update this file to use proper enumeration index value once it's exposed for forks via API + // This should happen as the migration of Boojum completes + Some(0_u64) + } } impl ReadStorage for InMemoryStorage { @@ -82,6 +88,10 @@ impl ReadStorage for InMemoryStorage { fn load_factory_dep(&mut self, hash: H256) -> Option> { (&*self).load_factory_dep(hash) } + + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option { + (&*self).get_enumeration_index(key) + } } /// Functionality to read from the VM storage. @@ -103,6 +113,9 @@ pub trait ReadStorage: fmt::Debug { let code_key = get_known_code_key(bytecode_hash); self.read_value(&code_key) != H256::zero() } + + /// Retrieves the enumeration index for a given `key`. + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option; } /// Functionality to write to the VM storage in a batch. diff --git a/src/deps/system_contracts.rs b/src/deps/system_contracts.rs index 4437e406..6ce359a0 100644 --- a/src/deps/system_contracts.rs +++ b/src/deps/system_contracts.rs @@ -1,6 +1,6 @@ use once_cell::sync::Lazy; use serde_json::Value; -use zksync_basic_types::{AccountTreeId, Address}; +use zksync_basic_types::{AccountTreeId, Address, H160}; use zksync_types::{ block::DeployedContract, ACCOUNT_CODE_STORAGE_ADDRESS, BOOTLOADER_ADDRESS, BOOTLOADER_UTILITIES_ADDRESS, COMPRESSOR_ADDRESS, CONTRACT_DEPLOYER_ADDRESS, @@ -10,6 +10,18 @@ use zksync_types::{ SHA256_PRECOMPILE_ADDRESS, SYSTEM_CONTEXT_ADDRESS, }; +/// The `ecAdd` system contract address. +pub const ECADD_PRECOMPILE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, +]); + +/// The `ecMul` system contract address. +pub const ECMUL_PRECOMPILE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, +]); + pub fn bytecode_from_slice(artifact_name: &str, contents: &[u8]) -> Vec { let artifact: Value = serde_json::from_slice(contents).expect(artifact_name); let bytecode = artifact["bytecode"] @@ -108,6 +120,16 @@ pub static COMPILED_IN_SYSTEM_CONTRACTS: Lazy> = Lazy::new EVENT_WRITER_ADDRESS, include_bytes!("contracts/EventWriter.yul.zbin").to_vec(), ), + ( + "ECADD_PRECOMPILE_ADDRESS", + ECADD_PRECOMPILE_ADDRESS, + include_bytes!("contracts/EcAdd.yul.zbin").to_vec(), + ), + ( + "ECMUL_PRECOMPILE_ADDRESS", + ECMUL_PRECOMPILE_ADDRESS, + include_bytes!("contracts/EcMul.yul.zbin").to_vec(), + ), ] .map(|(_pname, address, contents)| DeployedContract { account_id: AccountTreeId::new(address), diff --git a/src/evm.rs b/src/evm.rs deleted file mode 100644 index ed3efc78..00000000 --- a/src/evm.rs +++ /dev/null @@ -1,675 +0,0 @@ -use std::sync::{Arc, RwLock}; - -use crate::{ - fork::ForkSource, - node::{InMemoryNodeInner, Snapshot}, - utils::mine_empty_blocks, -}; -use jsonrpc_core::{BoxFuture, Result}; -use jsonrpc_derive::rpc; -use zksync_basic_types::U64; -use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; -use zksync_web3_decl::error::Web3Error; - -/// The maximum number of [Snapshot]s to store. Each snapshot represents the node state -/// and can be used to revert the node to an earlier point in time. -const MAX_SNAPSHOTS: u8 = 100; - -/// Implementation of EvmNamespace -pub struct EvmNamespaceImpl { - node: Arc>>, - /// List of snapshots of the [InMemoryNodeInner]. This is bounded at runtime by [MAX_SNAPSHOTS]. - snapshots: Arc>>, -} - -impl EvmNamespaceImpl { - /// Creates a new `Evm` instance with the given `node`. - pub fn new(node: Arc>>) -> Self { - Self { - node, - snapshots: Default::default(), - } - } -} - -#[rpc] -pub trait EvmNamespaceT { - /// Increase the current timestamp for the node - /// - /// # Parameters - /// - `time_delta`: The number of seconds to increase time by - /// - /// # Returns - /// The applied time delta to `current_timestamp` value for the InMemoryNodeInner. - #[rpc(name = "evm_increaseTime")] - fn increase_time(&self, time_delta_seconds: u64) -> BoxFuture>; - - /// Force a single block to be mined. - /// - /// Will mine an empty block (containing zero transactions) - /// - /// # Returns - /// The string "0x0". - #[rpc(name = "evm_mine")] - fn evm_mine(&self) -> BoxFuture>; - - /// Set the current timestamp for the node. The timestamp must be in future. - /// - /// # Parameters - /// - `timestamp`: The timestamp to set the time to - /// - /// # Returns - /// The new timestamp value for the InMemoryNodeInner. - #[rpc(name = "evm_setNextBlockTimestamp")] - fn set_next_block_timestamp(&self, timestamp: u64) -> BoxFuture>; - - /// Set the current timestamp for the node. - /// Warning: This will allow you to move backwards in time, which may cause new blocks to appear to be - /// mined before old blocks. This will result in an invalid state. - /// - /// # Parameters - /// - `time`: The timestamp to set the time to - /// - /// # Returns - /// The difference between the `current_timestamp` and the new timestamp for the InMemoryNodeInner. - #[rpc(name = "evm_setTime")] - fn set_time(&self, time: u64) -> BoxFuture>; - - /// Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the id of the snapshot - /// that was created. A snapshot can only be reverted once. After a successful evm_revert, the same snapshot id cannot - /// be used again. Consider creating a new snapshot after each evm_revert if you need to revert to the same - /// point multiple times. - /// - /// # Returns - /// The `U64` identifier for this snapshot. - #[rpc(name = "evm_snapshot")] - fn snapshot(&self) -> BoxFuture>; - - /// Revert the state of the blockchain to a previous snapshot. Takes a single parameter, - /// which is the snapshot id to revert to. This deletes the given snapshot, as well as any snapshots - /// taken after (e.g.: reverting to id 0x1 will delete snapshots with ids 0x1, 0x2, etc.) - /// - /// # Parameters - /// - `snapshot_id`: The snapshot id to revert. - /// - /// # Returns - /// `true` if a snapshot was reverted, otherwise `false`. - #[rpc(name = "evm_revert")] - fn revert_snapshot(&self, snapshot_id: U64) -> BoxFuture>; -} - -impl EvmNamespaceT - for EvmNamespaceImpl -{ - fn increase_time(&self, time_delta_seconds: u64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - if time_delta_seconds == 0 { - return Ok(time_delta_seconds); - } - - let time_delta = time_delta_seconds.saturating_mul(1000); - match inner.write() { - Ok(mut inner_guard) => { - inner_guard.current_timestamp = - inner_guard.current_timestamp.saturating_add(time_delta); - Ok(time_delta_seconds) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn set_next_block_timestamp(&self, timestamp: u64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - if timestamp < inner_guard.current_timestamp { - Err(into_jsrpc_error(Web3Error::InternalError)) - } else { - inner_guard.current_timestamp = timestamp; - Ok(timestamp) - } - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn set_time(&self, time: u64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - let time_diff = - (time as i128).saturating_sub(inner_guard.current_timestamp as i128); - inner_guard.current_timestamp = time; - Ok(time_diff) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn evm_mine(&self) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - mine_empty_blocks(&mut inner, 1, 1000); - tracing::info!("👷 Mined block #{}", inner.current_miniblock); - Ok("0x0".to_string()) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn snapshot(&self) -> BoxFuture> { - let inner = Arc::clone(&self.node); - let snapshots = Arc::clone(&self.snapshots); - - Box::pin(async move { - // validate max snapshots - snapshots - .read() - .map_err(|err| { - tracing::error!("failed acquiring read lock for snapshot: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - }) - .and_then(|snapshots| { - if snapshots.len() >= MAX_SNAPSHOTS as usize { - tracing::error!("maximum number of '{}' snapshots exceeded", MAX_SNAPSHOTS); - Err(into_jsrpc_error(Web3Error::InternalError)) - } else { - Ok(()) - } - })?; - - // snapshot the node - let snapshot = inner - .read() - .map_err(|err| { - format!("failed acquiring read lock to node for snapshot: {:?}", err) - }) - .and_then(|reader| reader.snapshot()) - .map_err(|err| { - tracing::error!("failed creating snapshot: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - })?; - snapshots - .write() - .map(|mut snapshots| { - snapshots.push(snapshot); - tracing::info!("Created snapshot '{}'", snapshots.len()); - snapshots.len() - }) - .map_err(|err| { - tracing::error!("failed storing snapshot: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - }) - .map(U64::from) - }) - } - - fn revert_snapshot(&self, snapshot_id: U64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - let snapshots = Arc::clone(&self.snapshots); - - Box::pin(async move { - let mut snapshots = snapshots.write().map_err(|err| { - tracing::error!("failed acquiring read lock for snapshots: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - })?; - let snapshot_id_index = snapshot_id.as_usize().saturating_sub(1); - if snapshot_id_index >= snapshots.len() { - tracing::error!("no snapshot exists for the id '{}'", snapshot_id); - return Err(into_jsrpc_error(Web3Error::InternalError)); - } - - // remove all snapshots following the index and use the first snapshot for restore - let selected_snapshot = snapshots - .drain(snapshot_id_index..) - .next() - .expect("unexpected failure, value must exist"); - - inner - .write() - .map_err(|err| format!("failed acquiring read lock for snapshots: {:?}", err)) - .and_then(|mut writer| { - tracing::info!("Reverting node to snapshot '{snapshot_id:?}'"); - writer.restore_snapshot(selected_snapshot).map(|_| true) - }) - .or_else(|err| { - tracing::error!( - "failed restoring snapshot for id '{}': {}", - snapshot_id, - err - ); - Ok(false) - }) - }) - } -} - -#[cfg(test)] -mod tests { - use crate::{http_fork_source::HttpForkSource, node::InMemoryNode}; - use zksync_core::api_server::web3::backend_jsonrpc::namespaces::eth::EthNamespaceT; - - use super::*; - - #[tokio::test] - async fn test_increase_time_zero_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let increase_value_seconds = 0u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - let expected_response = increase_value_seconds; - - let actual_response = evm - .increase_time(increase_value_seconds) - .await - .expect("failed increasing timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - increase_value_seconds.saturating_mul(1000u64), - timestamp_after.saturating_sub(timestamp_before), - "timestamp did not increase by the specified amount", - ); - } - - #[tokio::test] - async fn test_increase_time_max_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let increase_value_seconds = u64::MAX; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!(0, timestamp_before, "initial timestamp must be non zero",); - let expected_response = increase_value_seconds; - - let actual_response = evm - .increase_time(increase_value_seconds) - .await - .expect("failed increasing timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - u64::MAX, - timestamp_after, - "timestamp did not saturate upon increase", - ); - } - - #[tokio::test] - async fn test_increase_time() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let increase_value_seconds = 100u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - let expected_response = increase_value_seconds; - - let actual_response = evm - .increase_time(increase_value_seconds) - .await - .expect("failed increasing timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - increase_value_seconds.saturating_mul(1000u64), - timestamp_after.saturating_sub(timestamp_before), - "timestamp did not increase by the specified amount", - ); - } - - #[tokio::test] - async fn test_set_next_block_timestamp_future() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_timestamp = 10_000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!( - timestamp_before, new_timestamp, - "timestamps must be different" - ); - let expected_response = new_timestamp; - - let actual_response = evm - .set_next_block_timestamp(new_timestamp) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - new_timestamp, timestamp_after, - "timestamp was not set correctly", - ); - } - - #[tokio::test] - async fn test_set_next_block_timestamp_past_fails() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - let new_timestamp = timestamp_before + 500; - evm.set_next_block_timestamp(new_timestamp) - .await - .expect("failed setting timestamp"); - - let result = evm.set_next_block_timestamp(timestamp_before).await; - - assert!(result.is_err(), "expected an error for timestamp in past"); - } - - #[tokio::test] - async fn test_set_next_block_timestamp_same_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_timestamp = 1000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_eq!(timestamp_before, new_timestamp, "timestamps must be same"); - let expected_response = new_timestamp; - - let actual_response = evm - .set_next_block_timestamp(new_timestamp) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - timestamp_before, timestamp_after, - "timestamp must not change", - ); - } - - #[tokio::test] - async fn test_set_time_future() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_time = 10_000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!(timestamp_before, new_time, "timestamps must be different"); - let expected_response = 9000; - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); - } - - #[tokio::test] - async fn test_set_time_past() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_time = 10u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!(timestamp_before, new_time, "timestamps must be different"); - let expected_response = -990; - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); - } - - #[tokio::test] - async fn test_set_time_same_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_time = 1000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_eq!(timestamp_before, new_time, "timestamps must be same"); - let expected_response = 0; - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - timestamp_before, timestamp_after, - "timestamp must not change", - ); - } - - #[tokio::test] - async fn test_set_time_edges() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - for new_time in [0, u64::MAX] { - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); - assert_ne!( - timestamp_before, new_time, - "case {new_time}: timestamps must be different" - ); - let expected_response = (new_time as i128).saturating_sub(timestamp_before as i128); - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); - - assert_eq!( - expected_response, actual_response, - "case {new_time}: erroneous response" - ); - assert_eq!( - new_time, timestamp_after, - "case {new_time}: timestamp was not set correctly", - ); - } - } - - #[tokio::test] - async fn test_evm_mine() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let start_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - let result = evm.evm_mine().await.expect("evm_mine"); - assert_eq!(&result, "0x0"); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 1, current_block.number); - assert_eq!(start_block.timestamp + 1, current_block.timestamp); - - let result = evm.evm_mine().await.expect("evm_mine"); - assert_eq!(&result, "0x0"); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 2, current_block.number); - assert_eq!(start_block.timestamp + 2, current_block.timestamp); - } - - #[tokio::test] - async fn test_evm_snapshot_creates_incrementing_ids() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let snapshot_id_1 = evm.snapshot().await.expect("failed creating snapshot 1"); - let snapshot_id_2 = evm.snapshot().await.expect("failed creating snapshot 2"); - - assert_eq!(snapshot_id_1, U64::from(1)); - assert_eq!(snapshot_id_2, U64::from(2)); - } - - #[tokio::test] - async fn test_evm_revert_snapshot_restores_state() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let initial_block = node - .get_block_number() - .await - .expect("failed fetching block number"); - let snapshot_id = evm.snapshot().await.expect("failed creating snapshot"); - evm.evm_mine().await.expect("evm_mine"); - let current_block = node - .get_block_number() - .await - .expect("failed fetching block number"); - assert_eq!(current_block, initial_block + 1); - - let reverted = evm - .revert_snapshot(snapshot_id) - .await - .expect("failed reverting snapshot"); - assert!(reverted); - - let restored_block = node - .get_block_number() - .await - .expect("failed fetching block number"); - assert_eq!(restored_block, initial_block); - } - - #[tokio::test] - async fn test_evm_revert_snapshot_removes_all_snapshots_following_the_reverted_one() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let _snapshot_id_1 = evm.snapshot().await.expect("failed creating snapshot"); - let snapshot_id_2 = evm.snapshot().await.expect("failed creating snapshot"); - let _snapshot_id_3 = evm.snapshot().await.expect("failed creating snapshot"); - assert_eq!(3, evm.snapshots.read().unwrap().len()); - - let reverted = evm - .revert_snapshot(snapshot_id_2) - .await - .expect("failed reverting snapshot"); - assert!(reverted); - - assert_eq!(1, evm.snapshots.read().unwrap().len()); - } - - #[tokio::test] - async fn test_evm_revert_snapshot_fails_for_invalid_snapshot_id() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let result = evm.revert_snapshot(U64::from(100)).await; - assert!(result.is_err()); - } -} diff --git a/src/fork.rs b/src/fork.rs index ab191419..f4cb9a27 100644 --- a/src/fork.rs +++ b/src/fork.rs @@ -148,6 +148,12 @@ impl ForkStorage { local_storage } } + + /// Retrieves the enumeration index for a given `key`. + fn get_enumeration_index_internal(&self, _key: &StorageKey) -> Option { + // TODO: Update this file to use proper enumeration index value once it's exposed for forks via API + Some(0_u64) + } } impl ReadStorage for ForkStorage { @@ -164,9 +170,8 @@ impl ReadStorage for ForkStorage { self.read_value_internal(key) } - fn get_enumeration_index(&mut self, _key: &StorageKey) -> Option { - // TODO:? - unimplemented!() + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option { + self.get_enumeration_index_internal(key) } } @@ -184,9 +189,8 @@ impl ReadStorage for &ForkStorage { self.load_factory_dep_internal(hash) } - fn get_enumeration_index(&mut self, _key: &StorageKey) -> Option { - // TODO:? - unimplemented!() + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option { + self.get_enumeration_index_internal(key) } } @@ -270,6 +274,13 @@ pub trait ForkSource { /// Returns addresses of the default bridge contracts. fn get_bridge_contracts(&self) -> eyre::Result; + + /// Returns confirmed tokens + fn get_confirmed_tokens( + &self, + from: u32, + limit: u8, + ) -> eyre::Result>; } /// Holds the information about the original chain. @@ -290,10 +301,15 @@ pub struct ForkDetails { } const SUPPORTED_VERSIONS: &[ProtocolVersionId] = &[ + ProtocolVersionId::Version9, + ProtocolVersionId::Version10, + ProtocolVersionId::Version11, + ProtocolVersionId::Version12, ProtocolVersionId::Version13, ProtocolVersionId::Version14, ProtocolVersionId::Version15, ProtocolVersionId::Version16, + ProtocolVersionId::Version17, ]; pub fn supported_protocol_versions(version: ProtocolVersionId) -> bool { @@ -382,9 +398,11 @@ impl ForkDetails { pub async fn from_network_tx(fork: &str, tx: H256, cache_config: CacheConfig) -> Self { let (url, client) = Self::fork_to_url_and_client(fork); let tx_details = client.get_transaction_by_hash(tx).await.unwrap().unwrap(); - let overwrite_chain_id = Some(L2ChainId::try_from(tx_details.chain_id).unwrap_or_else( - |err| panic!("erroneous chain id {}: {:?}", tx_details.chain_id, err,), - )); + let overwrite_chain_id = Some( + L2ChainId::try_from(tx_details.chain_id.as_u64()).unwrap_or_else(|err| { + panic!("erroneous chain id {}: {:?}", tx_details.chain_id, err,) + }), + ); let miniblock_number = MiniblockNumber(tx_details.block_number.unwrap().as_u32()); // We have to sync to the one-miniblock before the one where transaction is. let l2_miniblock = miniblock_number.saturating_sub(1) as u64; diff --git a/src/formatter.rs b/src/formatter.rs index 080046eb..3a4993b4 100644 --- a/src/formatter.rs +++ b/src/formatter.rs @@ -2,13 +2,15 @@ use crate::{node::ShowCalls, resolver}; use colored::Colorize; + use serde::Deserialize; use std::collections::HashMap; +use std::str; use crate::fork::block_on; use zksync_basic_types::H160; -use vm::VmExecutionResultAndLogs; +use multivm::interface::VmExecutionResultAndLogs; use zksync_types::{vm_trace::Call, StorageLogQuery, StorageLogQueryType, VmEvent}; use lazy_static::lazy_static; @@ -74,12 +76,46 @@ pub fn print_event(event: &VmEvent, resolve_hashes: bool) { } tracing::info!( - "{} {}", + "{}", address_to_human_readable(event.address) .map(|x| format!("{:42}", x.blue())) - .unwrap_or(format!("{:42}", format!("{:?}", event.address).blue())), - tt.join(", ") + .unwrap_or(format!("{:42}", format!("{:?}", event.address).blue())) ); + + tracing::info!("{}", " Topics:".truecolor(128, 128, 128)); + for indexed_topic in &tt { + tracing::info!(" {}", indexed_topic); + } + + if event.value.is_empty() { + tracing::info!("{}", " Data: EMPTY".truecolor(128, 128, 128)); + } else { + match str::from_utf8(&event.value) { + Ok(v) => { + tracing::info!( + "{} {}", + " Data (String):".truecolor(128, 128, 128), + v.to_string() + ); + } + Err(_) => { + let hex_str = hex::encode(&event.value); + let display_str = if hex_str.len() > 200 { + format!("{}...", &hex_str[..200]) + } else { + hex_str.to_string() + }; + + tracing::info!( + "{} 0x{}", + " Data (Hex):".truecolor(128, 128, 128), + display_str + ); + } + }; + } + + tracing::info!(""); }); } @@ -201,8 +237,8 @@ pub fn print_vm_details(result: &VmExecutionResultAndLogs) { ); tracing::info!("Contracts Used: {}", result.statistics.contracts_used); match &result.result { - vm::ExecutionResult::Success { .. } => {} - vm::ExecutionResult::Revert { output } => { + multivm::interface::ExecutionResult::Success { .. } => {} + multivm::interface::ExecutionResult::Revert { output } => { tracing::info!(""); tracing::info!( "{}", @@ -213,7 +249,7 @@ pub fn print_vm_details(result: &VmExecutionResultAndLogs) { .on_red() ); } - vm::ExecutionResult::Halt { reason } => { + multivm::interface::ExecutionResult::Halt { reason } => { tracing::info!(""); tracing::info!("{}", format!("\n[!] Halt Reason: {}", reason).on_red()); } diff --git a/src/hardhat.rs b/src/hardhat.rs deleted file mode 100644 index dc99774e..00000000 --- a/src/hardhat.rs +++ /dev/null @@ -1,518 +0,0 @@ -use std::sync::{Arc, RwLock}; - -use crate::{ - fork::ForkSource, - node::InMemoryNodeInner, - utils::{bytecode_to_factory_dep, mine_empty_blocks, IntoBoxedFuture}, -}; -use jsonrpc_core::{BoxFuture, Result}; -use jsonrpc_derive::rpc; -use zksync_basic_types::{Address, U256, U64}; -use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; -use zksync_state::ReadStorage; -use zksync_types::{ - get_code_key, get_nonce_key, - utils::{decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance}, -}; -use zksync_utils::{h256_to_u256, u256_to_h256}; -use zksync_web3_decl::error::Web3Error; - -/// Implementation of HardhatNamespaceImpl -pub struct HardhatNamespaceImpl { - node: Arc>>, -} - -impl HardhatNamespaceImpl { - /// Creates a new `Hardhat` instance with the given `node`. - pub fn new(node: Arc>>) -> Self { - Self { node } - } -} - -#[rpc] -pub trait HardhatNamespaceT { - /// Sets the balance of the given address to the given balance. - /// - /// # Arguments - /// - /// * `address` - The `Address` whose balance will be edited - /// * `balance` - The new balance to set for the given address, in wei - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_setBalance")] - fn set_balance(&self, address: Address, balance: U256) -> BoxFuture>; - - /// Modifies an account's nonce by overwriting it. - /// - /// # Arguments - /// - /// * `address` - The `Address` whose nonce is to be changed - /// * `nonce` - The new nonce - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_setNonce")] - fn set_nonce(&self, address: Address, balance: U256) -> BoxFuture>; - - /// Sometimes you may want to advance the latest block number of the network by a large number of blocks. - /// One way to do this would be to call the evm_mine RPC method multiple times, but this is too slow if you want to mine thousands of blocks. - /// The hardhat_mine method can mine any number of blocks at once, in constant time. (It exhibits the same performance no matter how many blocks are mined.) - /// - /// # Arguments - /// - /// * `num_blocks` - The number of blocks to mine, defaults to 1 - /// * `interval` - The interval between the timestamps of each block, in seconds, and it also defaults to 1 - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_mine")] - fn hardhat_mine( - &self, - num_blocks: Option, - interval: Option, - ) -> BoxFuture>; - - /// Hardhat Network allows you to send transactions impersonating specific account and contract addresses. - /// To impersonate an account use this method, passing the address to impersonate as its parameter. - /// After calling this method, any transactions with this sender will be executed without verification. - /// Multiple addresses can be impersonated at once. - /// - /// # Arguments - /// - /// * `address` - The address to impersonate - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_impersonateAccount")] - fn impersonate_account(&self, address: Address) -> BoxFuture>; - - /// Use this method to stop impersonating an account after having previously used `hardhat_impersonateAccount` - /// The method returns `true` if the account was being impersonated and `false` otherwise. - /// - /// # Arguments - /// - /// * `address` - The address to stop impersonating. - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_stopImpersonatingAccount")] - fn stop_impersonating_account(&self, address: Address) -> BoxFuture>; - - /// Modifies the bytecode stored at an account's address. - /// - /// # Arguments - /// - /// * `address` - The address where the given code should be stored. - /// * `code` - The code to be stored. - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_setCode")] - fn set_code(&self, address: Address, code: Vec) -> BoxFuture>; -} - -impl HardhatNamespaceT - for HardhatNamespaceImpl -{ - fn set_balance( - &self, - address: Address, - balance: U256, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - let balance_key = storage_key_for_eth_balance(&address); - inner_guard - .fork_storage - .set_value(balance_key, u256_to_h256(balance)); - tracing::info!( - "👷 Balance for address {:?} has been manually set to {} Wei", - address, - balance - ); - Ok(true) - } - Err(_) => { - let web3_error = Web3Error::InternalError; - Err(into_jsrpc_error(web3_error)) - } - } - }) - } - - fn set_nonce( - &self, - address: Address, - nonce: U256, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - let nonce_key = get_nonce_key(&address); - let full_nonce = inner_guard.fork_storage.read_value(&nonce_key); - let (mut account_nonce, mut deployment_nonce) = - decompose_full_nonce(h256_to_u256(full_nonce)); - if account_nonce >= nonce { - return Err(jsonrpc_core::Error::invalid_params(format!( - "Account Nonce is already set to a higher value ({}, requested {})", - account_nonce, nonce - ))); - } - account_nonce = nonce; - if deployment_nonce >= nonce { - return Err(jsonrpc_core::Error::invalid_params(format!( - "Deployment Nonce is already set to a higher value ({}, requested {})", - deployment_nonce, nonce - ))); - } - deployment_nonce = nonce; - let enforced_full_nonce = nonces_to_full_nonce(account_nonce, deployment_nonce); - tracing::info!( - "👷 Nonces for address {:?} have been set to {}", - address, - nonce - ); - inner_guard - .fork_storage - .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); - Ok(true) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn hardhat_mine( - &self, - num_blocks: Option, - interval: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - let num_blocks = num_blocks.unwrap_or_else(|| U64::from(1)); - let interval_ms = interval - .unwrap_or_else(|| U64::from(1)) - .saturating_mul(1_000.into()); - if num_blocks.is_zero() { - return Err(jsonrpc_core::Error::invalid_params( - "Number of blocks must be greater than 0".to_string(), - )); - } - mine_empty_blocks(&mut inner, num_blocks.as_u64(), interval_ms.as_u64()); - tracing::info!("👷 Mined {} blocks", num_blocks); - Ok(true) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn impersonate_account(&self, address: Address) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - if inner.set_impersonated_account(address) { - tracing::info!("🕵️ Account {:?} has been impersonated", address); - Ok(true) - } else { - tracing::info!("🕵️ Account {:?} was already impersonated", address); - Ok(false) - } - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn stop_impersonating_account(&self, address: Address) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - if inner.stop_impersonating_account(address) { - tracing::info!("🕵️ Stopped impersonating account {:?}", address); - Ok(true) - } else { - tracing::info!( - "🕵️ Account {:?} was not impersonated, nothing to stop", - address - ); - Ok(false) - } - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn set_code(&self, address: Address, code: Vec) -> BoxFuture> { - let inner = Arc::clone(&self.node); - inner - .write() - .map(|mut writer| { - let code_key = get_code_key(&address); - tracing::info!("set code for address {address:#x}"); - let (hash, code) = bytecode_to_factory_dep(code); - let hash = u256_to_h256(hash); - writer.fork_storage.store_factory_dep( - hash, - code.iter() - .flat_map(|entry| { - let mut bytes = vec![0u8; 32]; - entry.to_big_endian(&mut bytes); - bytes.to_vec() - }) - .collect(), - ); - writer.fork_storage.set_value(code_key, hash); - }) - .map_err(|_| into_jsrpc_error(Web3Error::InternalError)) - .into_boxed_future() - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::{http_fork_source::HttpForkSource, node::InMemoryNode}; - use std::str::FromStr; - use zksync_basic_types::{Nonce, H256}; - use zksync_core::api_server::web3::backend_jsonrpc::namespaces::eth::EthNamespaceT; - use zksync_types::{api::BlockNumber, fee::Fee, l2::L2Tx, PackedEthSignature}; - - #[tokio::test] - async fn test_set_balance() { - let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - - let balance_before = node.get_balance(address, None).await.unwrap(); - - let result = hardhat - .set_balance(address, U256::from(1337)) - .await - .unwrap(); - assert!(result); - - let balance_after = node.get_balance(address, None).await.unwrap(); - assert_eq!(balance_after, U256::from(1337)); - assert_ne!(balance_before, balance_after); - } - - #[tokio::test] - async fn test_set_nonce() { - let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - - let nonce_before = node.get_transaction_count(address, None).await.unwrap(); - - let result = hardhat.set_nonce(address, U256::from(1337)).await.unwrap(); - assert!(result); - - let nonce_after = node.get_transaction_count(address, None).await.unwrap(); - assert_eq!(nonce_after, U256::from(1337)); - assert_ne!(nonce_before, nonce_after); - - // setting nonce lower than the current one should fail - let result = hardhat.set_nonce(address, U256::from(1336)).await; - assert!(result.is_err()); - } - - #[tokio::test] - async fn test_hardhat_mine_default() { - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - - let start_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - // test with defaults - let result = hardhat - .hardhat_mine(None, None) - .await - .expect("hardhat_mine"); - assert!(result); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 1, current_block.number); - assert_eq!(start_block.timestamp + 1, current_block.timestamp); - let result = hardhat - .hardhat_mine(None, None) - .await - .expect("hardhat_mine"); - assert!(result); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 2, current_block.number); - assert_eq!(start_block.timestamp + 2, current_block.timestamp); - } - - #[tokio::test] - async fn test_hardhat_mine_custom() { - let node = InMemoryNode::::default(); - let hardhat: HardhatNamespaceImpl = - HardhatNamespaceImpl::new(node.get_inner()); - - let start_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - let num_blocks = 5; - let interval = 3; - let start_timestamp = start_block.timestamp + 1; - - let result = hardhat - .hardhat_mine(Some(U64::from(num_blocks)), Some(U64::from(interval))) - .await - .expect("hardhat_mine"); - assert!(result); - - for i in 0..num_blocks { - let current_block = node - .get_block_by_number(BlockNumber::Number(start_block.number + i + 1), false) - .await - .unwrap() - .expect("block exists"); - assert_eq!(start_block.number + i + 1, current_block.number); - assert_eq!( - start_timestamp + i * interval * 1_000, - current_block.timestamp - ); - } - } - - #[tokio::test] - async fn test_impersonate_account() { - let node = InMemoryNode::::default(); - let hardhat: HardhatNamespaceImpl = - HardhatNamespaceImpl::new(node.get_inner()); - let to_impersonate = - Address::from_str("0xd8da6bf26964af9d7eed9e03e53415d37aa96045").unwrap(); - - // give impersonated account some balance - let result = hardhat - .set_balance(to_impersonate, U256::exp10(18)) - .await - .unwrap(); - assert!(result); - - // construct a tx - let mut tx = L2Tx::new( - Address::random(), - vec![], - Nonce(0), - Fee { - gas_limit: U256::from(1_000_000), - max_fee_per_gas: U256::from(250_000_000), - max_priority_fee_per_gas: U256::from(250_000_000), - gas_per_pubdata_limit: U256::from(20000), - }, - to_impersonate, - U256::one(), - None, - Default::default(), - ); - tx.set_input(vec![], H256::random()); - if tx.common_data.signature.is_empty() { - tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); - } - - // try to execute the tx- should fail without signature - assert!(node.apply_txs(vec![tx.clone()]).is_err()); - - // impersonate the account - let result = hardhat - .impersonate_account(to_impersonate) - .await - .expect("impersonate_account"); - - // result should be true - assert!(result); - - // impersonating the same account again should return false - let result = hardhat - .impersonate_account(to_impersonate) - .await - .expect("impersonate_account"); - assert!(!result); - - // execution should now succeed - assert!(node.apply_txs(vec![tx.clone()]).is_ok()); - - // stop impersonating the account - let result = hardhat - .stop_impersonating_account(to_impersonate) - .await - .expect("stop_impersonating_account"); - - // result should be true - assert!(result); - - // stop impersonating the same account again should return false - let result = hardhat - .stop_impersonating_account(to_impersonate) - .await - .expect("stop_impersonating_account"); - assert!(!result); - - // execution should now fail again - assert!(node.apply_txs(vec![tx]).is_err()); - } - - #[tokio::test] - async fn test_set_code() { - let address = Address::repeat_byte(0x1); - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - let new_code = vec![0x1u8; 32]; - - let code_before = node - .get_code(address, None) - .await - .expect("failed getting code") - .0; - assert_eq!(Vec::::default(), code_before); - - hardhat - .set_code(address, new_code.clone()) - .await - .expect("failed setting code"); - - let code_after = node - .get_code(address, None) - .await - .expect("failed getting code") - .0; - assert_eq!(new_code, code_after); - } -} diff --git a/src/http_fork_source.rs b/src/http_fork_source.rs index c375bd16..4cbb3439 100644 --- a/src/http_fork_source.rs +++ b/src/http_fork_source.rs @@ -1,33 +1,33 @@ -use std::sync::RwLock; +use std::sync::{Arc, RwLock}; +use crate::{ + cache::{Cache, CacheConfig}, + fork::{block_on, ForkSource}, +}; use eyre::Context; use zksync_basic_types::{H256, U256}; use zksync_types::api::{BridgeAddresses, Transaction}; +use zksync_web3_decl::types::Token; use zksync_web3_decl::{ jsonrpsee::http_client::{HttpClient, HttpClientBuilder}, namespaces::{EthNamespaceClient, ZksNamespaceClient}, types::Index, }; -use crate::{ - cache::{Cache, CacheConfig}, - fork::{block_on, ForkSource}, -}; - -#[derive(Debug)] +#[derive(Debug, Clone)] /// Fork source that gets the data via HTTP requests. pub struct HttpForkSource { /// URL for the network to fork. pub fork_url: String, /// Cache for network data. - pub(crate) cache: RwLock, + pub(crate) cache: Arc>, } impl HttpForkSource { pub fn new(fork_url: String, cache_config: CacheConfig) -> Self { Self { fork_url, - cache: RwLock::new(Cache::new(cache_config)), + cache: Arc::new(RwLock::new(Cache::new(cache_config))), } } @@ -306,6 +306,37 @@ impl ForkSource for HttpForkSource { }) .wrap_err("fork http client failed") } + + /// Returns known token addresses + fn get_confirmed_tokens(&self, from: u32, limit: u8) -> eyre::Result> { + if let Some(confirmed_tokens) = self + .cache + .read() + .ok() + .and_then(|guard| guard.get_confirmed_tokens(from, limit).cloned()) + { + tracing::debug!("using cached confirmed_tokens"); + return Ok(confirmed_tokens); + }; + + let client = self.create_client(); + block_on(async move { client.get_confirmed_tokens(from, limit).await }) + .map(|confirmed_tokens| { + self.cache + .write() + .map(|mut guard| { + guard.set_confirmed_tokens(from, limit, confirmed_tokens.clone()) + }) + .unwrap_or_else(|err| { + tracing::warn!( + "failed writing to cache for 'set_confirmed_tokens': {:?}", + err + ) + }); + confirmed_tokens + }) + .wrap_err("fork http client failed") + } } #[cfg(test)] @@ -669,8 +700,8 @@ mod tests { "result": { "l1Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l1_erc20_default_bridge), "l2Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l2_erc20_default_bridge), - "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.clone().unwrap()), - "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.clone().unwrap()) + "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.unwrap()), + "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.unwrap()) }, "id": 0 }), @@ -688,4 +719,43 @@ mod tests { .expect("failed fetching bridge addresses"); testing::assert_bridge_addresses_eq(&input_bridge_addresses, &actual_bridge_addresses); } + + #[test] + fn test_get_confirmed_tokens_is_cached() { + let mock_server = testing::MockServer::run(); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 0, + "method": "zks_getConfirmedTokens", + "params": [0, 100] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": [ + { + "decimals": 18, + "l1Address": "0xbe9895146f7af43049ca1c1ae358b0541ea49704", + "l2Address": "0x75af292c1c9a37b3ea2e6041168b4e48875b9ed5", + "name": "Coinbase Wrapped Staked ETH", + "symbol": "cbETH" + } + ], + "id": 0 + }), + ); + + let fork_source = HttpForkSource::new(mock_server.url(), CacheConfig::Memory); + + let tokens = fork_source + .get_confirmed_tokens(0, 100) + .expect("failed fetching tokens"); + assert_eq!(tokens.len(), 1); + assert_eq!(tokens[0].symbol, "cbETH"); + + let tokens = fork_source + .get_confirmed_tokens(0, 100) + .expect("failed fetching tokens"); + assert_eq!(tokens.len(), 1); + } } diff --git a/src/lib.rs b/src/lib.rs index 36d7e081..d28de8ac 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,20 +42,18 @@ //! Contributions to improve `era-test-node` are welcome. Please refer to the [contribution guidelines](https://github.com/matter-labs/era-test-node/blob/main/.github/CONTRIBUTING.md) for more details. pub mod bootloader_debug; -pub mod configuration_api; pub mod console_log; pub mod deps; -pub mod eth_test; pub mod filters; pub mod fork; pub mod formatter; pub mod http_fork_source; +pub mod namespaces; pub mod node; pub mod observability; pub mod resolver; pub mod system_contracts; pub mod utils; -pub mod zks; mod cache; mod testing; diff --git a/src/main.rs b/src/main.rs index 0bd0b914..c6ae60c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,42 +1,31 @@ use crate::cache::CacheConfig; -use crate::hardhat::{HardhatNamespaceImpl, HardhatNamespaceT}; use crate::node::{InMemoryNodeConfig, ShowGasDetails, ShowStorageLogs, ShowVMDetails}; use crate::observability::Observability; use clap::{Parser, Subcommand, ValueEnum}; -use configuration_api::ConfigurationApiNamespaceT; -use debug::DebugNamespaceImpl; -use evm::{EvmNamespaceImpl, EvmNamespaceT}; use fork::{ForkDetails, ForkSource}; use logging_middleware::LoggingMiddleware; use node::ShowCalls; use observability::LogLevel; use tracing_subscriber::filter::LevelFilter; -use zks::ZkMockNamespaceImpl; mod bootloader_debug; mod cache; -mod configuration_api; mod console_log; -mod debug; mod deps; -mod eth_test; -mod evm; mod filters; mod fork; mod formatter; -mod hardhat; mod http_fork_source; mod logging_middleware; +mod namespaces; mod node; pub mod observability; mod resolver; mod system_contracts; mod testing; mod utils; -mod zks; use node::InMemoryNode; -use zksync_core::api_server::web3::namespaces::NetNamespace; use std::fs::File; use std::{ @@ -51,12 +40,11 @@ use futures::{ FutureExt, }; use jsonrpc_core::MetaIoHandler; -use zksync_basic_types::{L2ChainId, H160, H256}; +use zksync_basic_types::{H160, H256}; -use crate::eth_test::EthTestNodeNamespaceT; -use crate::{configuration_api::ConfigurationApiNamespace, node::TEST_NODE_NETWORK_ID}; -use zksync_core::api_server::web3::backend_jsonrpc::namespaces::{ - debug::DebugNamespaceT, eth::EthNamespaceT, net::NetNamespaceT, zks::ZksNamespaceT, +use crate::namespaces::{ + ConfigurationApiNamespaceT, DebugNamespaceT, EthNamespaceT, EthTestNodeNamespaceT, + EvmNamespaceT, HardhatNamespaceT, NetNamespaceT, Web3NamespaceT, ZksNamespaceT, }; /// List of wallets (address, private key) that we seed with tokens at start. @@ -105,30 +93,26 @@ pub const RICH_WALLETS: [(&str, &str); 10] = [ #[allow(clippy::too_many_arguments)] async fn build_json_http< - S: std::marker::Sync + std::marker::Send + 'static + ForkSource + std::fmt::Debug, + S: std::marker::Sync + std::marker::Send + 'static + ForkSource + std::fmt::Debug + Clone, >( addr: SocketAddr, log_level_filter: LevelFilter, node: InMemoryNode, - net: NetNamespace, - config_api: ConfigurationApiNamespace, - evm: EvmNamespaceImpl, - zks: ZkMockNamespaceImpl, - hardhat: HardhatNamespaceImpl, - debug: DebugNamespaceImpl, ) -> tokio::task::JoinHandle<()> { let (sender, recv) = oneshot::channel::<()>(); let io_handler = { let mut io = MetaIoHandler::with_middleware(LoggingMiddleware::new(log_level_filter)); + + io.extend_with(NetNamespaceT::to_delegate(node.clone())); + io.extend_with(Web3NamespaceT::to_delegate(node.clone())); + io.extend_with(ConfigurationApiNamespaceT::to_delegate(node.clone())); + io.extend_with(DebugNamespaceT::to_delegate(node.clone())); io.extend_with(EthNamespaceT::to_delegate(node.clone())); - io.extend_with(EthTestNodeNamespaceT::to_delegate(node)); - io.extend_with(net.to_delegate()); - io.extend_with(config_api.to_delegate()); - io.extend_with(evm.to_delegate()); - io.extend_with(zks.to_delegate()); - io.extend_with(hardhat.to_delegate()); - io.extend_with(debug.to_delegate()); + io.extend_with(EthTestNodeNamespaceT::to_delegate(node.clone())); + io.extend_with(EvmNamespaceT::to_delegate(node.clone())); + io.extend_with(HardhatNamespaceT::to_delegate(node.clone())); + io.extend_with(ZksNamespaceT::to_delegate(node)); io }; @@ -340,23 +324,10 @@ async fn main() -> anyhow::Result<()> { tracing::info!(""); } - let net = NetNamespace::new(L2ChainId::from(TEST_NODE_NETWORK_ID)); - let config_api = ConfigurationApiNamespace::new(node.get_inner()); - let evm = EvmNamespaceImpl::new(node.get_inner()); - let zks = ZkMockNamespaceImpl::new(node.get_inner()); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - let debug = DebugNamespaceImpl::new(node.get_inner()); - let threads = build_json_http( SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), opt.port), log_level_filter, node, - net, - config_api, - evm, - zks, - hardhat, - debug, ) .await; diff --git a/src/namespaces/config.rs b/src/namespaces/config.rs new file mode 100644 index 00000000..32214b8c --- /dev/null +++ b/src/namespaces/config.rs @@ -0,0 +1,93 @@ +use crate::namespaces::Result; +use crate::observability::LogLevel; +use jsonrpc_derive::rpc; + +#[rpc] +pub trait ConfigurationApiNamespaceT { + /// Get the InMemoryNodeInner's show_calls property as a string + /// + /// # Returns + /// The current `show_calls` value for the InMemoryNodeInner. + #[rpc(name = "config_getShowCalls", returns = "String")] + fn config_get_show_calls(&self) -> Result; + + /// Get the InMemoryNodeInner's current_timestamp property + /// + /// # Returns + /// The current `current_timestamp` value for the InMemoryNodeInner. + #[rpc(name = "config_getCurrentTimestamp", returns = "u64")] + fn config_get_current_timestamp(&self) -> Result; + + /// Set show_calls for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowCalls enum to update show_calls to + /// + /// # Returns + /// The updated/current `show_calls` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowCalls", returns = "String")] + fn config_set_show_calls(&self, value: String) -> Result; + + /// Set show_storage_logs for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowStorageLogs enum to update show_storage_logs to + /// + /// # Returns + /// The updated/current `show_storage_logs` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowStorageLogs", returns = "String")] + fn config_set_show_storage_logs(&self, value: String) -> Result; + + /// Set show_vm_details for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowVMDetails enum to update show_vm_details to + /// + /// # Returns + /// The updated/current `show_vm_details` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowVmDetails", returns = "String")] + fn config_set_show_vm_details(&self, value: String) -> Result; + + /// Set show_gas_details for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowGasDetails enum to update show_gas_details to + /// + /// # Returns + /// The updated/current `show_gas_details` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowGasDetails", returns = "String")] + fn config_set_show_gas_details(&self, value: String) -> Result; + + /// Set resolve_hashes for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A bool to update resolve_hashes to + /// + /// # Returns + /// The updated `resolve_hashes` value for the InMemoryNodeInner. + #[rpc(name = "config_setResolveHashes", returns = "bool")] + fn config_set_resolve_hashes(&self, value: bool) -> Result; + + /// Set the logging for the InMemoryNodeInner + /// + /// # Parameters + /// - `level`: The log level to set. One of: ["trace", "debug", "info", "warn", "error"] + /// + /// # Returns + /// `true` if the operation succeeded, `false` otherwise. + #[rpc(name = "config_setLogLevel", returns = "bool")] + fn config_set_log_level(&self, level: LogLevel) -> Result; + + /// Set the logging for the InMemoryNodeInner + /// + /// # Parameters + /// - `level`: The logging directive to set. Example: + /// * "my_crate=debug" + /// * "my_crate::module=trace" + /// * "my_crate=debug,other_crate=warn" + /// + /// # Returns + /// `true` if the operation succeeded, `false` otherwise. + #[rpc(name = "config_setLogging", returns = "bool")] + fn config_set_logging(&self, directive: String) -> Result; +} diff --git a/src/debug.rs b/src/namespaces/debug.rs similarity index 97% rename from src/debug.rs rename to src/namespaces/debug.rs index 1eb162a1..1939ae64 100644 --- a/src/debug.rs +++ b/src/namespaces/debug.rs @@ -5,9 +5,11 @@ use crate::{ }; use itertools::Itertools; use jsonrpc_core::{BoxFuture, Result}; +use multivm::vm_latest::HistoryDisabled; +use multivm::interface::VmInterface; +use multivm::vm_latest::{constants::ETH_CALL_GAS_LIMIT, CallTracer, Vm}; use once_cell::sync::OnceCell; use std::sync::{Arc, RwLock}; -use vm::{constants::ETH_CALL_GAS_LIMIT, CallTracer, HistoryDisabled, TxExecutionMode, Vm}; use zksync_basic_types::H256; use zksync_core::api_server::web3::backend_jsonrpc::{ error::into_jsrpc_error, namespaces::debug::DebugNamespaceT, @@ -169,7 +171,7 @@ impl DebugNamespaceT } }; - let execution_mode = TxExecutionMode::EthCall; + let execution_mode = multivm::interface::TxExecutionMode::EthCall; let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); let bootloader_code = inner.system_contracts.contracts_for_l2_call(); @@ -180,7 +182,7 @@ impl DebugNamespaceT // update the enforced_base_fee within l1_batch_env to match the logic in zksync_core l1_batch_env.enforced_base_fee = Some(l2_tx.common_data.fee.max_fee_per_gas.as_u64()); let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); - let mut vm = Vm::new(l1_batch_env, system_env, storage, HistoryDisabled); + let mut vm: Vm<_, HistoryDisabled> = Vm::new(l1_batch_env, system_env, storage); // We must inject *some* signature (otherwise bootloader code fails to generate hash). if l2_tx.common_data.signature.is_empty() { @@ -197,8 +199,11 @@ impl DebugNamespaceT vm.push_transaction(tx); let call_tracer_result = Arc::new(OnceCell::default()); - let tracer = CallTracer::new(call_tracer_result.clone(), HistoryDisabled); - let tx_result = vm.inspect(vec![Box::new(tracer)], vm::VmExecutionMode::OneTx); + let tracer = CallTracer::new(call_tracer_result.clone()).into_tracer_pointer(); + let tx_result = vm.inspect( + tracer.into(), + multivm::interface::VmExecutionMode::OneTx, + ); let call_traces = if only_top { vec![] diff --git a/src/eth_test.rs b/src/namespaces/eth_test.rs similarity index 100% rename from src/eth_test.rs rename to src/namespaces/eth_test.rs diff --git a/src/namespaces/evm.rs b/src/namespaces/evm.rs new file mode 100644 index 00000000..79b95341 --- /dev/null +++ b/src/namespaces/evm.rs @@ -0,0 +1,70 @@ +use jsonrpc_derive::rpc; +use zksync_basic_types::U64; + +use crate::namespaces::RpcResult; + +#[rpc] +pub trait EvmNamespaceT { + /// Increase the current timestamp for the node + /// + /// # Parameters + /// - `time_delta`: The number of seconds to increase time by + /// + /// # Returns + /// The applied time delta to `current_timestamp` value for the InMemoryNodeInner. + #[rpc(name = "evm_increaseTime")] + fn increase_time(&self, time_delta_seconds: u64) -> RpcResult; + + /// Force a single block to be mined. + /// + /// Will mine an empty block (containing zero transactions) + /// + /// # Returns + /// The string "0x0". + #[rpc(name = "evm_mine")] + fn evm_mine(&self) -> RpcResult; + + /// Set the current timestamp for the node. The timestamp must be in future. + /// + /// # Parameters + /// - `timestamp`: The timestamp to set the time to + /// + /// # Returns + /// The new timestamp value for the InMemoryNodeInner. + #[rpc(name = "evm_setNextBlockTimestamp")] + fn set_next_block_timestamp(&self, timestamp: u64) -> RpcResult; + + /// Set the current timestamp for the node. + /// Warning: This will allow you to move backwards in time, which may cause new blocks to appear to be + /// mined before old blocks. This will result in an invalid state. + /// + /// # Parameters + /// - `time`: The timestamp to set the time to + /// + /// # Returns + /// The difference between the `current_timestamp` and the new timestamp for the InMemoryNodeInner. + #[rpc(name = "evm_setTime")] + fn set_time(&self, time: u64) -> RpcResult; + + /// Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the id of the snapshot + /// that was created. A snapshot can only be reverted once. After a successful evm_revert, the same snapshot id cannot + /// be used again. Consider creating a new snapshot after each evm_revert if you need to revert to the same + /// point multiple times. + /// + /// # Returns + /// The `U64` identifier for this snapshot. + #[rpc(name = "evm_snapshot")] + fn snapshot(&self) -> RpcResult; + + /// Revert the state of the blockchain to a previous snapshot. Takes a single parameter, + /// which is the snapshot id to revert to. This deletes the given snapshot, as well as any snapshots + /// taken after (e.g.: reverting to id 0x1 will delete snapshots with ids 0x1, 0x2, etc.) + /// + /// # Parameters + /// - `snapshot_id`: The snapshot id to revert. + /// + /// # Returns + /// `true` if a snapshot was reverted, otherwise `false`. + #[rpc(name = "evm_revert")] + fn revert_snapshot(&self, snapshot_id: U64) -> RpcResult; +} diff --git a/src/namespaces/hardhat.rs b/src/namespaces/hardhat.rs new file mode 100644 index 00000000..5a69f6b5 --- /dev/null +++ b/src/namespaces/hardhat.rs @@ -0,0 +1,89 @@ +use jsonrpc_derive::rpc; +use zksync_basic_types::{Address, U256, U64}; + +use super::RpcResult; + +#[rpc] +pub trait HardhatNamespaceT { + /// Sets the balance of the given address to the given balance. + /// + /// # Arguments + /// + /// * `address` - The `Address` whose balance will be edited + /// * `balance` - The new balance to set for the given address, in wei + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_setBalance")] + fn set_balance(&self, address: Address, balance: U256) -> RpcResult; + + /// Modifies an account's nonce by overwriting it. + /// + /// # Arguments + /// + /// * `address` - The `Address` whose nonce is to be changed + /// * `nonce` - The new nonce + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_setNonce")] + fn set_nonce(&self, address: Address, balance: U256) -> RpcResult; + + /// Sometimes you may want to advance the latest block number of the network by a large number of blocks. + /// One way to do this would be to call the evm_mine RPC method multiple times, but this is too slow if you want to mine thousands of blocks. + /// The hardhat_mine method can mine any number of blocks at once, in constant time. (It exhibits the same performance no matter how many blocks are mined.) + /// + /// # Arguments + /// + /// * `num_blocks` - The number of blocks to mine, defaults to 1 + /// * `interval` - The interval between the timestamps of each block, in seconds, and it also defaults to 1 + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_mine")] + fn hardhat_mine(&self, num_blocks: Option, interval: Option) -> RpcResult; + + /// Hardhat Network allows you to send transactions impersonating specific account and contract addresses. + /// To impersonate an account use this method, passing the address to impersonate as its parameter. + /// After calling this method, any transactions with this sender will be executed without verification. + /// Multiple addresses can be impersonated at once. + /// + /// # Arguments + /// + /// * `address` - The address to impersonate + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_impersonateAccount")] + fn impersonate_account(&self, address: Address) -> RpcResult; + + /// Use this method to stop impersonating an account after having previously used `hardhat_impersonateAccount` + /// The method returns `true` if the account was being impersonated and `false` otherwise. + /// + /// # Arguments + /// + /// * `address` - The address to stop impersonating. + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_stopImpersonatingAccount")] + fn stop_impersonating_account(&self, address: Address) -> RpcResult; + + /// Modifies the bytecode stored at an account's address. + /// + /// # Arguments + /// + /// * `address` - The address where the given code should be stored. + /// * `code` - The code to be stored. + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_setCode")] + fn set_code(&self, address: Address, code: Vec) -> RpcResult<()>; +} diff --git a/src/namespaces/mod.rs b/src/namespaces/mod.rs new file mode 100644 index 00000000..8c359b3e --- /dev/null +++ b/src/namespaces/mod.rs @@ -0,0 +1,21 @@ +mod config; +mod eth_test; +mod evm; +mod hardhat; +mod net; +mod web3; + +use zksync_core::api_server::web3::backend_jsonrpc::namespaces::{debug, eth, zks}; + +pub use config::ConfigurationApiNamespaceT; +pub use debug::DebugNamespaceT; +pub use eth::EthNamespaceT; +pub use eth_test::EthTestNodeNamespaceT; +pub use evm::EvmNamespaceT; +pub use hardhat::HardhatNamespaceT; +pub use net::NetNamespaceT; +pub use web3::Web3NamespaceT; +pub use zks::ZksNamespaceT; + +pub type Result = jsonrpc_core::Result; +pub type RpcResult = jsonrpc_core::BoxFuture>; diff --git a/src/namespaces/net.rs b/src/namespaces/net.rs new file mode 100644 index 00000000..f18aa142 --- /dev/null +++ b/src/namespaces/net.rs @@ -0,0 +1,16 @@ +use jsonrpc_derive::rpc; +use zksync_basic_types::U256; + +use crate::namespaces::Result; + +#[rpc] +pub trait NetNamespaceT { + #[rpc(name = "net_version", returns = "String")] + fn net_version(&self) -> Result; + + #[rpc(name = "net_peerCount", returns = "U256")] + fn net_peer_count(&self) -> Result; + + #[rpc(name = "net_listening", returns = "bool")] + fn net_listening(&self) -> Result; +} diff --git a/src/namespaces/web3.rs b/src/namespaces/web3.rs new file mode 100644 index 00000000..9bfb233c --- /dev/null +++ b/src/namespaces/web3.rs @@ -0,0 +1,9 @@ +use jsonrpc_derive::rpc; + +use crate::namespaces::Result; + +#[rpc] +pub trait Web3NamespaceT { + #[rpc(name = "web3_clientVersion", returns = "String")] + fn web3_client_version(&self) -> Result; +} diff --git a/src/net.rs b/src/net.rs deleted file mode 100644 index 0db92adf..00000000 --- a/src/net.rs +++ /dev/null @@ -1,38 +0,0 @@ -// Built-in uses - -// External uses -use jsonrpc_core::Result; -use jsonrpc_derive::rpc; - -// Workspace uses -use zksync_types::U256; - -// Local uses -use crate::web3::namespaces::NetNamespace; -use crate::node::TEST_NODE_NETWORK_ID; - -#[rpc] -pub trait NetNamespaceT { - #[rpc(name = "net_version", returns = "String")] - fn net_version(&self) -> Result; - - #[rpc(name = "net_peerCount", returns = "U256")] - fn net_peer_count(&self) -> Result; - - #[rpc(name = "net_listening", returns = "bool")] - fn net_listening(&self) -> Result; -} - -impl NetNamespaceT for NetNamespace { - fn net_version(&self) -> Result { - Ok(String::From(TEST_NODE_NETWORK_ID)) - } - - fn net_peer_count(&self) -> Result { - Ok(U256::From(0)) - } - - fn net_listening(&self) -> Result { - Ok(false) - } -} diff --git a/src/node/config.rs b/src/node/config.rs new file mode 100644 index 00000000..81f350ef --- /dev/null +++ b/src/node/config.rs @@ -0,0 +1,189 @@ +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{ConfigurationApiNamespaceT, Result}, + node::InMemoryNode, + observability::LogLevel, +}; + +use super::{ShowCalls, ShowGasDetails, ShowStorageLogs, ShowVMDetails}; + +impl ConfigurationApiNamespaceT + for InMemoryNode +{ + fn config_get_show_calls(&self) -> Result { + self.get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_calls.to_string()) + } + + fn config_get_current_timestamp(&self) -> Result { + self.get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.current_timestamp) + } + + fn config_set_show_calls(&self, value: String) -> Result { + let show_calls = match value.parse::() { + Ok(value) => value, + Err(_) => return self.config_get_show_calls(), + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_calls = show_calls; + writer.show_calls.to_string() + }) + } + + fn config_set_show_storage_logs(&self, value: String) -> Result { + let show_storage_logs = match value.parse::() { + Ok(value) => value, + Err(_) => { + return self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_storage_logs.to_string()) + } + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_storage_logs = show_storage_logs; + writer.show_storage_logs.to_string() + }) + } + + fn config_set_show_vm_details(&self, value: String) -> Result { + let show_vm_details = match value.parse::() { + Ok(value) => value, + Err(_) => { + return self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_vm_details.to_string()) + } + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_vm_details = show_vm_details; + writer.show_vm_details.to_string() + }) + } + + fn config_set_show_gas_details(&self, value: String) -> Result { + let show_gas_details = match value.parse::() { + Ok(value) => value, + Err(_) => { + return self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_gas_details.to_string()) + } + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_gas_details = show_gas_details; + writer.show_gas_details.to_string() + }) + } + + fn config_set_resolve_hashes(&self, value: bool) -> Result { + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.resolve_hashes = value; + writer.resolve_hashes + }) + } + + fn config_set_log_level(&self, level: LogLevel) -> Result { + if let Some(observability) = &self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + })? + .observability + { + match observability.set_log_level(level.clone()) { + Ok(_) => tracing::info!("set log level to '{}'", level), + Err(err) => { + tracing::error!("failed setting log level {:?}", err); + return Ok(false); + } + } + } + Ok(true) + } + + fn config_set_logging(&self, directive: String) -> Result { + if let Some(observability) = &self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + })? + .observability + { + match observability.set_logging(&directive) { + Ok(_) => tracing::info!("set logging to '{}'", directive), + Err(err) => { + tracing::error!("failed setting logging to '{}': {:?}", directive, err); + return Ok(false); + } + } + } + Ok(true) + } +} diff --git a/src/node/debug.rs b/src/node/debug.rs new file mode 100644 index 00000000..bccb3830 --- /dev/null +++ b/src/node/debug.rs @@ -0,0 +1,564 @@ +use itertools::Itertools; +use once_cell::sync::OnceCell; +use std::sync::Arc; + +use multivm::interface::VmInterface; +use multivm::tracers::CallTracer; +use multivm::vm_latest::HistoryDisabled; +use multivm::vm_latest::{constants::ETH_CALL_GAS_LIMIT, ToTracerPointer, Vm}; + +use zksync_basic_types::H256; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_state::StorageView; +use zksync_types::{ + api::{BlockId, BlockNumber, DebugCall, ResultDebugCall, TracerConfig, TransactionVariant}, + l2::L2Tx, + transaction_request::CallRequest, + PackedEthSignature, Transaction, U64, +}; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{DebugNamespaceT, Result, RpcResult}, + node::{InMemoryNode, MAX_TX_SIZE}, + utils::{create_debug_output, to_real_block_number}, +}; + +impl DebugNamespaceT + for InMemoryNode +{ + fn trace_block_by_number( + &self, + block: BlockNumber, + options: Option, + ) -> RpcResult> { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let block = { + let number = + to_real_block_number(block, U64::from(inner.current_miniblock)).as_u64(); + + inner + .block_hashes + .get(&number) + .and_then(|hash| inner.blocks.get(hash)) + .ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Block not found".to_string(), + vec![], + )) + })? + }; + + let tx_hashes = block + .transactions + .iter() + .map(|tx| match tx { + TransactionVariant::Full(tx) => tx.hash, + TransactionVariant::Hash(hash) => *hash, + }) + .collect_vec(); + + let debug_calls = tx_hashes + .into_iter() + .map(|tx_hash| { + let tx = inner.tx_results.get(&tx_hash).ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Transaction not found".to_string(), + vec![], + )) + })?; + Ok(tx.debug_info(only_top)) + }) + .collect::>>()? + .into_iter() + .map(|result| ResultDebugCall { result }) + .collect_vec(); + + Ok(debug_calls) + }) + } + + fn trace_block_by_hash( + &self, + hash: H256, + options: Option, + ) -> RpcResult> { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let block = inner.blocks.get(&hash).ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Block not found".to_string(), + vec![], + )) + })?; + + let tx_hashes = block + .transactions + .iter() + .map(|tx| match tx { + TransactionVariant::Full(tx) => tx.hash, + TransactionVariant::Hash(hash) => *hash, + }) + .collect_vec(); + + let debug_calls = tx_hashes + .into_iter() + .map(|tx_hash| { + let tx = inner.tx_results.get(&tx_hash).ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Transaction not found".to_string(), + vec![], + )) + })?; + Ok(tx.debug_info(only_top)) + }) + .collect::>>()? + .into_iter() + .map(|result| ResultDebugCall { result }) + .collect_vec(); + + Ok(debug_calls) + }) + } + + /// Trace execution of a transaction. + fn trace_call( + &self, + request: CallRequest, + block: Option, + options: Option, + ) -> RpcResult { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + if block.is_some() && !matches!(block, Some(BlockId::Number(BlockNumber::Latest))) { + return Err(jsonrpc_core::Error::invalid_params( + "tracing only supported at `latest` block", + )); + } + + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let mut l2_tx = match L2Tx::from_request(request.into(), MAX_TX_SIZE) { + Ok(tx) => tx, + Err(e) => { + let error = Web3Error::SerializationError(e); + return Err(into_jsrpc_error(error)); + } + }; + + let execution_mode = multivm::interface::TxExecutionMode::EthCall; + let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); + + let bootloader_code = inner.system_contracts.contracts_for_l2_call(); + + // init vm + let (mut l1_batch_env, _block_context) = inner.create_l1_batch_env(storage.clone()); + + // update the enforced_base_fee within l1_batch_env to match the logic in zksync_core + l1_batch_env.enforced_base_fee = Some(l2_tx.common_data.fee.max_fee_per_gas.as_u64()); + let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); + let mut vm: Vm<_, HistoryDisabled> = Vm::new(l1_batch_env, system_env, storage); + + // We must inject *some* signature (otherwise bootloader code fails to generate hash). + if l2_tx.common_data.signature.is_empty() { + l2_tx.common_data.signature = + PackedEthSignature::default().serialize_packed().into(); + } + + // Match behavior of zksync_core: + // Protection against infinite-loop eth_calls and alike: + // limiting the amount of gas the call can use. + l2_tx.common_data.fee.gas_limit = ETH_CALL_GAS_LIMIT.into(); + + let tx: Transaction = l2_tx.clone().into(); + vm.push_transaction(tx); + + let call_tracer_result = Arc::new(OnceCell::default()); + let tracer = CallTracer::new(call_tracer_result.clone()).into_tracer_pointer(); + let tx_result = vm.inspect(tracer.into(), multivm::interface::VmExecutionMode::OneTx); + + let call_traces = if only_top { + vec![] + } else { + Arc::try_unwrap(call_tracer_result) + .unwrap() + .take() + .unwrap_or_default() + }; + + let debug = + create_debug_output(&l2_tx, &tx_result, call_traces).map_err(into_jsrpc_error)?; + + Ok(debug) + }) + } + + fn trace_transaction( + &self, + tx_hash: H256, + options: Option, + ) -> RpcResult> { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + Ok(inner + .tx_results + .get(&tx_hash) + .map(|tx| tx.debug_info(only_top))) + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{ + deps::system_contracts::bytecode_from_slice, + http_fork_source::HttpForkSource, + node::{InMemoryNode, TransactionResult}, + testing::{self, LogBuilder}, + }; + use ethers::abi::{short_signature, AbiEncode, HumanReadableParser, ParamType, Token}; + use zksync_basic_types::{Address, Nonce, H160, U256}; + use zksync_types::{ + api::{Block, CallTracerConfig, SupportedTracers, TransactionReceipt}, + transaction_request::CallRequestBuilder, + utils::deployed_address_create, + }; + + fn deploy_test_contracts(node: &InMemoryNode) -> (Address, Address) { + let private_key = H256::repeat_byte(0xee); + let from_account = zksync_types::PackedEthSignature::address_from_private_key(&private_key) + .expect("failed generating address"); + node.set_rich_account(from_account); + + // first, deploy secondary contract + let secondary_bytecode = bytecode_from_slice( + "Secondary", + include_bytes!("../deps/test-contracts/Secondary.json"), + ); + let secondary_deployed_address = deployed_address_create(from_account, U256::zero()); + testing::deploy_contract( + node, + H256::repeat_byte(0x1), + private_key, + secondary_bytecode, + Some((U256::from(2),).encode()), + Nonce(0), + ); + + // deploy primary contract using the secondary contract address as a constructor parameter + let primary_bytecode = bytecode_from_slice( + "Primary", + include_bytes!("../deps/test-contracts/Primary.json"), + ); + let primary_deployed_address = deployed_address_create(from_account, U256::one()); + testing::deploy_contract( + node, + H256::repeat_byte(0x1), + private_key, + primary_bytecode, + Some((secondary_deployed_address).encode()), + Nonce(1), + ); + (primary_deployed_address, secondary_deployed_address) + } + + #[tokio::test] + async fn test_trace_deployed_contract() { + let node = InMemoryNode::::default(); + + let (primary_deployed_address, secondary_deployed_address) = deploy_test_contracts(&node); + + // trace a call to the primary contract + let func = HumanReadableParser::parse_function("calculate(uint)").unwrap(); + let calldata = func.encode_input(&[Token::Uint(U256::from(42))]).unwrap(); + let request = CallRequestBuilder::default() + .to(primary_deployed_address) + .data(calldata.clone().into()) + .gas(80_000_000.into()) + .build(); + let trace = node + .trace_call(request.clone(), None, None) + .await + .expect("trace call"); + + // call should not revert + assert!(trace.error.is_none()); + assert!(trace.revert_reason.is_none()); + + // check that the call was successful + let output = + ethers::abi::decode(&[ParamType::Uint(256)], trace.output.0.as_slice()).unwrap(); + assert_eq!(output[0], Token::Uint(U256::from(84))); + + // find the call to primary contract in the trace + let contract_call = trace + .calls + .first() + .unwrap() + .calls + .last() + .unwrap() + .calls + .first() + .unwrap(); + + assert_eq!(contract_call.to, primary_deployed_address); + assert_eq!(contract_call.input, calldata.into()); + + // check that it contains a call to secondary contract + let subcall = contract_call.calls.first().unwrap(); + assert_eq!(subcall.to, secondary_deployed_address); + assert_eq!(subcall.from, primary_deployed_address); + assert_eq!(subcall.output, U256::from(84).encode().into()); + } + + #[tokio::test] + async fn test_trace_only_top() { + let node = InMemoryNode::::default(); + + let (primary_deployed_address, _) = deploy_test_contracts(&node); + + // trace a call to the primary contract + let func = HumanReadableParser::parse_function("calculate(uint)").unwrap(); + let calldata = func.encode_input(&[Token::Uint(U256::from(42))]).unwrap(); + let request = CallRequestBuilder::default() + .to(primary_deployed_address) + .data(calldata.into()) + .gas(80_000_000.into()) + .build(); + + // if we trace with onlyTopCall=true, we should get only the top-level call + let trace = node + .trace_call( + request, + None, + Some(TracerConfig { + tracer: SupportedTracers::CallTracer, + tracer_config: CallTracerConfig { + only_top_call: true, + }, + }), + ) + .await + .expect("trace call"); + // call should not revert + assert!(trace.error.is_none()); + assert!(trace.revert_reason.is_none()); + + // call should not contain any subcalls + assert!(trace.calls.is_empty()); + } + + #[tokio::test] + async fn test_trace_reverts() { + let node = InMemoryNode::::default(); + + let (primary_deployed_address, _) = deploy_test_contracts(&node); + + // trace a call to the primary contract + let request = CallRequestBuilder::default() + .to(primary_deployed_address) + .data(short_signature("shouldRevert()", &[]).into()) + .gas(80_000_000.into()) + .build(); + let trace = node + .trace_call(request, None, None) + .await + .expect("trace call"); + + // call should revert + assert!(trace.revert_reason.is_some()); + + // find the call to primary contract in the trace + let contract_call = trace + .calls + .first() + .unwrap() + .calls + .last() + .unwrap() + .calls + .first() + .unwrap(); + + // the contract subcall should have reverted + assert!(contract_call.revert_reason.is_some()); + } + + #[tokio::test] + async fn test_trace_transaction() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + writer.tx_results.insert( + H256::repeat_byte(0x1), + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt { + logs: vec![LogBuilder::new() + .set_address(H160::repeat_byte(0xa1)) + .build()], + ..Default::default() + }, + debug: testing::default_tx_debug_info(), + }, + ); + } + let result = node + .trace_transaction(H256::repeat_byte(0x1), None) + .await + .unwrap() + .unwrap(); + assert_eq!(result.calls.len(), 1); + } + + #[tokio::test] + async fn test_trace_transaction_only_top() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + writer.tx_results.insert( + H256::repeat_byte(0x1), + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt { + logs: vec![LogBuilder::new() + .set_address(H160::repeat_byte(0xa1)) + .build()], + ..Default::default() + }, + debug: testing::default_tx_debug_info(), + }, + ); + } + let result = node + .trace_transaction( + H256::repeat_byte(0x1), + Some(TracerConfig { + tracer: SupportedTracers::CallTracer, + tracer_config: CallTracerConfig { + only_top_call: true, + }, + }), + ) + .await + .unwrap() + .unwrap(); + assert!(result.calls.is_empty()); + } + + #[tokio::test] + async fn test_trace_transaction_not_found() { + let node = InMemoryNode::::default(); + let result = node + .trace_transaction(H256::repeat_byte(0x1), None) + .await + .unwrap(); + assert!(result.is_none()); + } + + #[tokio::test] + async fn test_trace_block_by_hash_empty() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + let block = Block::::default(); + writer.blocks.insert(H256::repeat_byte(0x1), block); + } + let result = node + .trace_block_by_hash(H256::repeat_byte(0x1), None) + .await + .unwrap(); + assert_eq!(result.len(), 0); + } + + #[tokio::test] + async fn test_trace_block_by_hash() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + let tx = zksync_types::api::Transaction::default(); + let tx_hash = tx.hash; + let mut block = Block::::default(); + block.transactions.push(TransactionVariant::Full(tx)); + writer.blocks.insert(H256::repeat_byte(0x1), block); + writer.tx_results.insert( + tx_hash, + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt::default(), + debug: testing::default_tx_debug_info(), + }, + ); + } + let result = node + .trace_block_by_hash(H256::repeat_byte(0x1), None) + .await + .unwrap(); + assert_eq!(result.len(), 1); + assert_eq!(result[0].result.calls.len(), 1); + } + + #[tokio::test] + async fn test_trace_block_by_number() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + let tx = zksync_types::api::Transaction::default(); + let tx_hash = tx.hash; + let mut block = Block::::default(); + block.transactions.push(TransactionVariant::Full(tx)); + writer.blocks.insert(H256::repeat_byte(0x1), block); + writer.block_hashes.insert(0, H256::repeat_byte(0x1)); + writer.tx_results.insert( + tx_hash, + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt::default(), + debug: testing::default_tx_debug_info(), + }, + ); + } + // check `latest` alias + let result = node + .trace_block_by_number(BlockNumber::Latest, None) + .await + .unwrap(); + assert_eq!(result.len(), 1); + assert_eq!(result[0].result.calls.len(), 1); + + // check block number + let result = node + .trace_block_by_number(BlockNumber::Number(0.into()), None) + .await + .unwrap(); + assert_eq!(result.len(), 1); + assert_eq!(result[0].result.calls.len(), 1); + } +} diff --git a/src/node.rs b/src/node/eth.rs similarity index 59% rename from src/node.rs rename to src/node/eth.rs index fe13acbc..dcd04006 100644 --- a/src/node.rs +++ b/src/node/eth.rs @@ -1,1649 +1,42 @@ -//! In-memory node, that supports forking other networks. -use crate::{ - bootloader_debug::{BootloaderDebug, BootloaderDebugTracer}, - console_log::ConsoleLogHandler, - deps::InMemoryStorage, - filters::{EthFilters, FilterType, LogFilter}, - fork::{ForkDetails, ForkSource, ForkStorage}, - formatter, - observability::Observability, - system_contracts::{self, SystemContracts}, - utils::{ - self, adjust_l1_gas_price_for_tx, bytecode_to_factory_dep, create_debug_output, - not_implemented, to_human_size, IntoBoxedFuture, - }, -}; -use clap::Parser; +use std::collections::HashSet; + use colored::Colorize; -use core::fmt::Display; use futures::FutureExt; -use indexmap::IndexMap; use itertools::Itertools; -use jsonrpc_core::BoxFuture; -use once_cell::sync::OnceCell; -use std::{ - cmp::{self}, - collections::{HashMap, HashSet}, - str::FromStr, - sync::{Arc, RwLock}, -}; - -use crate::eth_test::EthTestNodeNamespaceT; -use vm::{ - constants::{ - BLOCK_GAS_LIMIT, BLOCK_OVERHEAD_PUBDATA, ETH_CALL_GAS_LIMIT, MAX_PUBDATA_PER_BLOCK, - }, - utils::{ - fee::derive_base_fee_and_gas_per_pubdata, - l2_blocks::load_last_l2_block, - overhead::{derive_overhead, OverheadCoeficients}, - }, - CallTracer, ExecutionResult, HistoryDisabled, L1BatchEnv, SystemEnv, TxExecutionMode, Vm, - VmExecutionResultAndLogs, VmTracer, -}; -use zksync_basic_types::{ - web3::{self, signing::keccak256}, - AccountTreeId, Address, Bytes, L1BatchNumber, MiniblockNumber, H160, H256, U256, U64, -}; -use zksync_contracts::BaseSystemContracts; -use zksync_core::api_server::web3::backend_jsonrpc::{ - error::into_jsrpc_error, namespaces::eth::EthNamespaceT, -}; -use zksync_state::{ReadStorage, StoragePtr, StorageView, WriteStorage}; -use zksync_types::vm_trace::Call; +use multivm::interface::{ExecutionResult, TxExecutionMode}; +use multivm::vm_latest::constants::ETH_CALL_GAS_LIMIT; +use zksync_basic_types::{web3, AccountTreeId, Address, Bytes, H160, H256, U256, U64}; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_state::ReadStorage; use zksync_types::{ - api::{Block, DebugCall, Log, TransactionReceipt, TransactionVariant}, - block::legacy_miniblock_hash, + api::{Block, BlockIdVariant, BlockNumber, TransactionVariant}, fee::Fee, get_code_key, get_nonce_key, l2::L2Tx, transaction_request::TransactionRequest, - utils::{ - decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance, - storage_key_for_standard_token_balance, - }, - PackedEthSignature, StorageKey, StorageLogQueryType, StorageValue, Transaction, - ACCOUNT_CODE_STORAGE_ADDRESS, EIP_712_TX_TYPE, L2_ETH_TOKEN_ADDRESS, MAX_GAS_PER_PUBDATA_BYTE, - MAX_L2_TX_GAS_LIMIT, -}; -use zksync_utils::{ - bytecode::{compress_bytecode, hash_bytecode}, - h256_to_account_address, h256_to_u256, h256_to_u64, u256_to_h256, + utils::storage_key_for_standard_token_balance, + PackedEthSignature, StorageKey, L2_ETH_TOKEN_ADDRESS, }; +use zksync_utils::{h256_to_u256, u256_to_h256}; use zksync_web3_decl::{ error::Web3Error, - types::{FeeHistory, Filter, FilterChanges}, + types::{FeeHistory, Filter, FilterChanges, SyncState}, }; -/// Max possible size of an ABI encoded tx (in bytes). -pub const MAX_TX_SIZE: usize = 1_000_000; -/// Timestamp of the first block (if not running in fork mode). -pub const NON_FORK_FIRST_BLOCK_TIMESTAMP: u64 = 1_000; -/// Network ID we use for the test node. -pub const TEST_NODE_NETWORK_ID: u32 = 260; -/// L1 Gas Price. -pub const L1_GAS_PRICE: u64 = 50_000_000_000; -/// L2 Gas Price (0.25 gwei). -pub const L2_GAS_PRICE: u64 = 250_000_000; -/// L1 Gas Price Scale Factor for gas estimation. -pub const ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR: f64 = 1.2; -/// The max possible number of gas that `eth_estimateGas` is allowed to overestimate. -pub const ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD: u32 = 100; -/// Acceptable gas overestimation limit. -pub const ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION: u32 = 1_000; -/// The factor by which to scale the gasLimit. -pub const ESTIMATE_GAS_SCALE_FACTOR: f32 = 1.3; -/// The maximum number of previous blocks to store the state for. -pub const MAX_PREVIOUS_STATES: u16 = 128; -/// The zks protocol version. -pub const PROTOCOL_VERSION: &str = "zks/1"; - -pub fn compute_hash(block_number: u64, tx_hash: H256) -> H256 { - let digest = [&block_number.to_be_bytes()[..], tx_hash.as_bytes()].concat(); - H256(keccak256(&digest)) -} - -pub fn create_empty_block(block_number: u64, timestamp: u64, batch: u32) -> Block { - let hash = compute_hash(block_number, H256::zero()); - Block { - hash, - number: U64::from(block_number), - timestamp: U256::from(timestamp), - l1_batch_number: Some(U64::from(batch)), - transactions: vec![], - gas_used: U256::from(0), - gas_limit: U256::from(BLOCK_GAS_LIMIT), - ..Default::default() - } -} - -/// Information about the executed transaction. -#[derive(Debug, Clone)] -pub struct TxExecutionInfo { - pub tx: L2Tx, - // Batch number where transaction was executed. - pub batch_number: u32, - pub miniblock_number: u64, - pub result: VmExecutionResultAndLogs, -} - -#[derive(Debug, Default, clap::Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowCalls { - #[default] - None, - User, - System, - All, -} - -impl FromStr for ShowCalls { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowCalls::None), - "user" => Ok(ShowCalls::User), - "system" => Ok(ShowCalls::System), - "all" => Ok(ShowCalls::All), - _ => Err(format!( - "Unknown ShowCalls value {} - expected one of none|user|system|all.", - s - )), - } - } -} - -impl Display for ShowCalls { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowStorageLogs { - #[default] - None, - Read, - Write, - All, -} - -impl FromStr for ShowStorageLogs { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowStorageLogs::None), - "read" => Ok(ShowStorageLogs::Read), - "write" => Ok(ShowStorageLogs::Write), - "all" => Ok(ShowStorageLogs::All), - _ => Err(format!( - "Unknown ShowStorageLogs value {} - expected one of none|read|write|all.", - s - )), - } - } -} - -impl Display for ShowStorageLogs { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowVMDetails { - #[default] - None, - All, -} - -impl FromStr for ShowVMDetails { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowVMDetails::None), - "all" => Ok(ShowVMDetails::All), - _ => Err(format!( - "Unknown ShowVMDetails value {} - expected one of none|all.", - s - )), - } - } -} - -impl Display for ShowVMDetails { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowGasDetails { - #[default] - None, - All, -} - -impl FromStr for ShowGasDetails { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowGasDetails::None), - "all" => Ok(ShowGasDetails::All), - _ => Err(format!( - "Unknown ShowGasDetails value {} - expected one of none|all.", - s - )), - } - } -} - -impl Display for ShowGasDetails { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Clone)] -pub struct TransactionResult { - pub info: TxExecutionInfo, - pub receipt: TransactionReceipt, - pub debug: DebugCall, -} - -impl TransactionResult { - /// Returns the debug information for the transaction. - /// If `only_top` is true - will only return the top level call. - pub fn debug_info(&self, only_top: bool) -> DebugCall { - let calls = if only_top { - vec![] - } else { - self.debug.calls.clone() - }; - DebugCall { - calls, - ..self.debug.clone() - } - } -} - -/// Helper struct for InMemoryNode. -/// S - is the Source of the Fork. -#[derive(Clone)] -pub struct InMemoryNodeInner { - /// The latest timestamp that was already generated. - /// Next block will be current_timestamp + 1 - pub current_timestamp: u64, - /// The latest batch number that was already generated. - /// Next block will be current_batch + 1 - pub current_batch: u32, - /// The latest miniblock number that was already generated. - /// Next transaction will go to the block current_miniblock + 1 - pub current_miniblock: u64, - /// The latest miniblock hash. - pub current_miniblock_hash: H256, - pub l1_gas_price: u64, - // Map from transaction to details about the exeuction - pub tx_results: HashMap, - // Map from block hash to information about the block. - pub blocks: HashMap>, - // Map from block number to a block hash. - pub block_hashes: HashMap, - // Map from filter_id to the eth filter - pub filters: EthFilters, - // Underlying storage - pub fork_storage: ForkStorage, - // Debug level information. - pub show_calls: ShowCalls, - // Displays storage logs. - pub show_storage_logs: ShowStorageLogs, - // Displays VM details. - pub show_vm_details: ShowVMDetails, - // Gas details information. - pub show_gas_details: ShowGasDetails, - // If true - will contact openchain to resolve the ABI to function names. - pub resolve_hashes: bool, - pub console_log_handler: ConsoleLogHandler, - pub system_contracts: SystemContracts, - pub impersonated_accounts: HashSet
, - pub rich_accounts: HashSet, - /// Keeps track of historical states indexed via block hash. Limited to [MAX_PREVIOUS_STATES]. - pub previous_states: IndexMap>, - /// An optional handle to the observability stack - pub observability: Option, -} - -type L2TxResult = ( - HashMap, - VmExecutionResultAndLogs, - Vec, - Block, - HashMap>, - BlockContext, -); - -impl InMemoryNodeInner { - pub fn create_l1_batch_env( - &self, - storage: StoragePtr, - ) -> (L1BatchEnv, BlockContext) { - let last_l2_block_hash = if let Some(last_l2_block) = load_last_l2_block(storage) { - last_l2_block.hash - } else { - // This is the scenario of either the first L2 block ever or - // the first block after the upgrade for support of L2 blocks. - legacy_miniblock_hash(MiniblockNumber(self.current_miniblock as u32)) - }; - let block_ctx = BlockContext::from_current( - self.current_batch, - self.current_miniblock, - self.current_timestamp, - ); - let block_ctx = block_ctx.new_batch(); - let batch_env = L1BatchEnv { - // TODO: set the previous batch hash properly (take from fork, when forking, and from local storage, when this is not the first block). - previous_batch_hash: None, - number: L1BatchNumber::from(block_ctx.batch), - timestamp: block_ctx.timestamp, - l1_gas_price: self.l1_gas_price, - fair_l2_gas_price: L2_GAS_PRICE, - fee_account: H160::zero(), - enforced_base_fee: None, - first_l2_block: vm::L2BlockEnv { - // the 'current_miniblock' contains the block that was already produced. - // So the next one should be one higher. - number: block_ctx.miniblock as u32, - timestamp: block_ctx.timestamp, - prev_block_hash: last_l2_block_hash, - // This is only used during zksyncEra block timestamp/number transition. - // In case of starting a new network, it doesn't matter. - // In theory , when forking mainnet, we should match this value - // to the value that was set in the node at that time - but AFAIK - // we don't have any API for this - so this might result in slightly - // incorrect replays of transacions during the migration period, that - // depend on block number or timestamp. - max_virtual_blocks_to_create: 1, - }, - }; - - (batch_env, block_ctx) - } - - pub fn create_system_env( - &self, - base_system_contracts: BaseSystemContracts, - execution_mode: TxExecutionMode, - ) -> SystemEnv { - SystemEnv { - zk_porter_available: false, - // TODO: when forking, we could consider taking the protocol version id from the fork itself. - version: zksync_types::ProtocolVersionId::latest(), - base_system_smart_contracts: base_system_contracts, - gas_limit: BLOCK_GAS_LIMIT, - execution_mode, - default_validation_computational_gas_limit: BLOCK_GAS_LIMIT, - chain_id: self.fork_storage.chain_id, - } - } - - /// Estimates the gas required for a given call request. - /// - /// # Arguments - /// - /// * `req` - A `CallRequest` struct representing the call request to estimate gas for. - /// - /// # Returns - /// - /// A `Result` with a `Fee` representing the estimated gas related data. - pub fn estimate_gas_impl( - &self, - req: zksync_types::transaction_request::CallRequest, - ) -> jsonrpc_core::Result { - let mut l2_tx = match L2Tx::from_request(req.into(), MAX_TX_SIZE) { - Ok(tx) => tx, - Err(e) => { - let error = Web3Error::SerializationError(e); - return Err(into_jsrpc_error(error)); - } - }; - - let tx: Transaction = l2_tx.clone().into(); - let fair_l2_gas_price = L2_GAS_PRICE; - - // Calculate Adjusted L1 Price - let l1_gas_price = { - let current_l1_gas_price = - ((self.l1_gas_price as f64) * ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR) as u64; - - // In order for execution to pass smoothly, we need to ensure that block's required gasPerPubdata will be - // <= to the one in the transaction itself. - adjust_l1_gas_price_for_tx( - current_l1_gas_price, - L2_GAS_PRICE, - tx.gas_per_pubdata_byte_limit(), - ) - }; - - let (base_fee, gas_per_pubdata_byte) = - derive_base_fee_and_gas_per_pubdata(l1_gas_price, fair_l2_gas_price); - - // Properly format signature - if l2_tx.common_data.signature.is_empty() { - l2_tx.common_data.signature = vec![0u8; 65]; - l2_tx.common_data.signature[64] = 27; - } - - l2_tx.common_data.fee.gas_per_pubdata_limit = MAX_GAS_PER_PUBDATA_BYTE.into(); - l2_tx.common_data.fee.max_fee_per_gas = base_fee.into(); - l2_tx.common_data.fee.max_priority_fee_per_gas = base_fee.into(); - - let mut storage_view = StorageView::new(&self.fork_storage); - - // Calculate gas_for_bytecodes_pubdata - let pubdata_for_factory_deps = l2_tx - .execute - .factory_deps - .as_deref() - .unwrap_or_default() - .iter() - .map(|bytecode| { - if storage_view.is_bytecode_known(&hash_bytecode(bytecode)) { - return 0; - } - - let length = if let Ok(compressed) = compress_bytecode(bytecode) { - compressed.len() - } else { - bytecode.len() - }; - length as u32 + ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD - }) - .sum::(); - - if pubdata_for_factory_deps > MAX_PUBDATA_PER_BLOCK { - return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - "exceeds limit for published pubdata".into(), - Default::default(), - ))); - } - - let gas_for_bytecodes_pubdata: u32 = - pubdata_for_factory_deps * (gas_per_pubdata_byte as u32); - - let storage = storage_view.to_rc_ptr(); - - let execution_mode = TxExecutionMode::EstimateFee; - let (mut batch_env, _) = self.create_l1_batch_env(storage.clone()); - batch_env.l1_gas_price = l1_gas_price; - let impersonating = self - .impersonated_accounts - .contains(&l2_tx.common_data.initiator_address); - let system_env = self.create_system_env( - self.system_contracts - .contracts_for_fee_estimate(impersonating) - .clone(), - execution_mode, - ); - - // We are using binary search to find the minimal values of gas_limit under which the transaction succeeds - let mut lower_bound = 0; - let mut upper_bound = MAX_L2_TX_GAS_LIMIT as u32; - let mut attempt_count = 1; - - tracing::trace!("Starting gas estimation loop"); - while lower_bound + ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION < upper_bound { - let mid = (lower_bound + upper_bound) / 2; - tracing::trace!( - "Attempt {} (lower_bound: {}, upper_bound: {}, mid: {})", - attempt_count, - lower_bound, - upper_bound, - mid - ); - let try_gas_limit = gas_for_bytecodes_pubdata + mid; - - let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( - l2_tx.clone(), - gas_per_pubdata_byte, - try_gas_limit, - l1_gas_price, - batch_env.clone(), - system_env.clone(), - &self.fork_storage, - ); - - if estimate_gas_result.result.is_failed() { - tracing::trace!("Attempt {} FAILED", attempt_count); - lower_bound = mid + 1; - } else { - tracing::trace!("Attempt {} SUCCEEDED", attempt_count); - upper_bound = mid; - } - attempt_count += 1; - } - - tracing::trace!("Gas Estimation Values:"); - tracing::trace!(" Final upper_bound: {}", upper_bound); - tracing::trace!(" ESTIMATE_GAS_SCALE_FACTOR: {}", ESTIMATE_GAS_SCALE_FACTOR); - tracing::trace!(" MAX_L2_TX_GAS_LIMIT: {}", MAX_L2_TX_GAS_LIMIT); - let tx_body_gas_limit = cmp::min( - MAX_L2_TX_GAS_LIMIT as u32, - (upper_bound as f32 * ESTIMATE_GAS_SCALE_FACTOR) as u32, - ); - let suggested_gas_limit = tx_body_gas_limit + gas_for_bytecodes_pubdata; - - let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( - l2_tx.clone(), - gas_per_pubdata_byte, - suggested_gas_limit, - l1_gas_price, - batch_env, - system_env, - &self.fork_storage, - ); - - let coefficients = OverheadCoeficients::from_tx_type(EIP_712_TX_TYPE); - let overhead: u32 = derive_overhead( - suggested_gas_limit, - gas_per_pubdata_byte as u32, - tx.encoding_len(), - coefficients, - ); - - match estimate_gas_result.result { - ExecutionResult::Revert { output } => { - tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); - tracing::info!( - "{}", - format!( - "\tEstimated transaction body gas cost: {}", - tx_body_gas_limit - ) - .red() - ); - tracing::info!( - "{}", - format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() - ); - tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); - let message = output.to_string(); - let pretty_message = format!( - "execution reverted{}{}", - if message.is_empty() { "" } else { ": " }, - message - ); - let data = output.encoded_data(); - tracing::info!("{}", pretty_message.on_red()); - Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - pretty_message, - data, - ))) - } - ExecutionResult::Halt { reason } => { - tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); - tracing::info!( - "{}", - format!( - "\tEstimated transaction body gas cost: {}", - tx_body_gas_limit - ) - .red() - ); - tracing::info!( - "{}", - format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() - ); - tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); - let message = reason.to_string(); - let pretty_message = format!( - "execution reverted{}{}", - if message.is_empty() { "" } else { ": " }, - message - ); - - tracing::info!("{}", pretty_message.on_red()); - Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - pretty_message, - vec![], - ))) - } - ExecutionResult::Success { .. } => { - let full_gas_limit = match tx_body_gas_limit - .overflowing_add(gas_for_bytecodes_pubdata + overhead) - { - (value, false) => value, - (_, true) => { - tracing::info!("{}", "Overflow when calculating gas estimation. We've exceeded the block gas limit by summing the following values:".red()); - tracing::info!( - "{}", - format!( - "\tEstimated transaction body gas cost: {}", - tx_body_gas_limit - ) - .red() - ); - tracing::info!( - "{}", - format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() - ); - tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); - return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - "exceeds block gas limit".into(), - Default::default(), - ))); - } - }; - - tracing::trace!("Gas Estimation Results"); - tracing::trace!(" tx_body_gas_limit: {}", tx_body_gas_limit); - tracing::trace!(" gas_for_bytecodes_pubdata: {}", gas_for_bytecodes_pubdata); - tracing::trace!(" overhead: {}", overhead); - tracing::trace!(" full_gas_limit: {}", full_gas_limit); - let fee = Fee { - max_fee_per_gas: base_fee.into(), - max_priority_fee_per_gas: 0u32.into(), - gas_limit: full_gas_limit.into(), - gas_per_pubdata_limit: gas_per_pubdata_byte.into(), - }; - Ok(fee) - } - } - } - - /// Runs fee estimation against a sandbox vm with the given gas_limit. - #[allow(clippy::too_many_arguments)] - fn estimate_gas_step( - mut l2_tx: L2Tx, - gas_per_pubdata_byte: u64, - tx_gas_limit: u32, - l1_gas_price: u64, - mut batch_env: L1BatchEnv, - system_env: SystemEnv, - fork_storage: &ForkStorage, - ) -> VmExecutionResultAndLogs { - let tx: Transaction = l2_tx.clone().into(); - let l1_gas_price = - adjust_l1_gas_price_for_tx(l1_gas_price, L2_GAS_PRICE, tx.gas_per_pubdata_byte_limit()); - - let coefficients = OverheadCoeficients::from_tx_type(EIP_712_TX_TYPE); - // Set gas_limit for transaction - let gas_limit_with_overhead = tx_gas_limit - + derive_overhead( - tx_gas_limit, - gas_per_pubdata_byte as u32, - tx.encoding_len(), - coefficients, - ); - l2_tx.common_data.fee.gas_limit = gas_limit_with_overhead.into(); - - let storage = StorageView::new(fork_storage).to_rc_ptr(); - - // The nonce needs to be updated - let nonce = l2_tx.nonce(); - let nonce_key = get_nonce_key(&l2_tx.initiator_account()); - let full_nonce = storage.borrow_mut().read_value(&nonce_key); - let (_, deployment_nonce) = decompose_full_nonce(h256_to_u256(full_nonce)); - let enforced_full_nonce = nonces_to_full_nonce(U256::from(nonce.0), deployment_nonce); - storage - .borrow_mut() - .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); - - // We need to explicitly put enough balance into the account of the users - let payer = l2_tx.payer(); - let balance_key = storage_key_for_eth_balance(&payer); - let mut current_balance = h256_to_u256(storage.borrow_mut().read_value(&balance_key)); - let added_balance = l2_tx.common_data.fee.gas_limit * l2_tx.common_data.fee.max_fee_per_gas; - current_balance += added_balance; - storage - .borrow_mut() - .set_value(balance_key, u256_to_h256(current_balance)); - - batch_env.l1_gas_price = l1_gas_price; - - let mut vm = Vm::new(batch_env, system_env, storage, HistoryDisabled); - - let tx: Transaction = l2_tx.into(); - vm.push_transaction(tx); - - vm.execute(vm::VmExecutionMode::OneTx) - } - - /// Sets the `impersonated_account` field of the node. - /// This field is used to override the `tx.initiator_account` field of the transaction in the `run_l2_tx` method. - pub fn set_impersonated_account(&mut self, address: Address) -> bool { - self.impersonated_accounts.insert(address) - } - - /// Clears the `impersonated_account` field of the node. - pub fn stop_impersonating_account(&mut self, address: Address) -> bool { - self.impersonated_accounts.remove(&address) - } - - /// Archives the current state for later queries. - pub fn archive_state(&mut self) -> Result<(), String> { - if self.previous_states.len() > MAX_PREVIOUS_STATES as usize { - if let Some(entry) = self.previous_states.shift_remove_index(0) { - tracing::debug!("removing archived state for previous block {:#x}", entry.0); - } - } - tracing::debug!( - "archiving state for {:#x} #{}", - self.current_miniblock_hash, - self.current_miniblock - ); - self.previous_states.insert( - self.current_miniblock_hash, - self.fork_storage - .inner - .read() - .map_err(|err| err.to_string())? - .raw_storage - .state - .clone(), - ); - - Ok(()) - } - - /// Creates a [Snapshot] of the current state of the node. - pub fn snapshot(&self) -> Result { - let storage = self - .fork_storage - .inner - .read() - .map_err(|err| format!("failed acquiring read lock on storage: {:?}", err))?; - - Ok(Snapshot { - current_timestamp: self.current_timestamp, - current_batch: self.current_batch, - current_miniblock: self.current_miniblock, - current_miniblock_hash: self.current_miniblock_hash, - l1_gas_price: self.l1_gas_price, - tx_results: self.tx_results.clone(), - blocks: self.blocks.clone(), - block_hashes: self.block_hashes.clone(), - filters: self.filters.clone(), - impersonated_accounts: self.impersonated_accounts.clone(), - rich_accounts: self.rich_accounts.clone(), - previous_states: self.previous_states.clone(), - raw_storage: storage.raw_storage.clone(), - value_read_cache: storage.value_read_cache.clone(), - factory_dep_cache: storage.factory_dep_cache.clone(), - }) - } - - /// Restores a previously created [Snapshot] of the node. - pub fn restore_snapshot(&mut self, snapshot: Snapshot) -> Result<(), String> { - let mut storage = self - .fork_storage - .inner - .write() - .map_err(|err| format!("failed acquiring write lock on storage: {:?}", err))?; - - self.current_timestamp = snapshot.current_timestamp; - self.current_batch = snapshot.current_batch; - self.current_miniblock = snapshot.current_miniblock; - self.current_miniblock_hash = snapshot.current_miniblock_hash; - self.l1_gas_price = snapshot.l1_gas_price; - self.tx_results = snapshot.tx_results; - self.blocks = snapshot.blocks; - self.block_hashes = snapshot.block_hashes; - self.filters = snapshot.filters; - self.impersonated_accounts = snapshot.impersonated_accounts; - self.rich_accounts = snapshot.rich_accounts; - self.previous_states = snapshot.previous_states; - storage.raw_storage = snapshot.raw_storage; - storage.value_read_cache = snapshot.value_read_cache; - storage.factory_dep_cache = snapshot.factory_dep_cache; - - Ok(()) - } -} - -/// Creates a restorable snapshot for the [InMemoryNodeInner]. The snapshot contains all the necessary -/// data required to restore the [InMemoryNodeInner] state to a previous point in time. -#[derive(Debug, Clone)] -pub struct Snapshot { - pub(crate) current_timestamp: u64, - pub(crate) current_batch: u32, - pub(crate) current_miniblock: u64, - pub(crate) current_miniblock_hash: H256, - pub(crate) l1_gas_price: u64, - pub(crate) tx_results: HashMap, - pub(crate) blocks: HashMap>, - pub(crate) block_hashes: HashMap, - pub(crate) filters: EthFilters, - pub(crate) impersonated_accounts: HashSet
, - pub(crate) rich_accounts: HashSet, - pub(crate) previous_states: IndexMap>, - pub(crate) raw_storage: InMemoryStorage, - pub(crate) value_read_cache: HashMap, - pub(crate) factory_dep_cache: HashMap>>, -} - -/// Defines the configuration parameters for the [InMemoryNode]. -#[derive(Default, Debug, Clone)] -pub struct InMemoryNodeConfig { - pub show_calls: ShowCalls, - pub show_storage_logs: ShowStorageLogs, - pub show_vm_details: ShowVMDetails, - pub show_gas_details: ShowGasDetails, - pub resolve_hashes: bool, - pub system_contracts_options: system_contracts::Options, -} - -/// In-memory node, that can be used for local & unit testing. -/// It also supports the option of forking testnet/mainnet. -/// All contents are removed when object is destroyed. -pub struct InMemoryNode { - inner: Arc>>, -} - -// Derive doesn't work -impl Clone for InMemoryNode { - fn clone(&self) -> Self { - Self { - inner: self.inner.clone(), - } - } -} - -fn contract_address_from_tx_result(execution_result: &VmExecutionResultAndLogs) -> Option { - for query in execution_result.logs.storage_logs.iter().rev() { - if query.log_type == StorageLogQueryType::InitialWrite - && query.log_query.address == ACCOUNT_CODE_STORAGE_ADDRESS - { - return Some(h256_to_account_address(&u256_to_h256(query.log_query.key))); - } - } - None -} - -impl Default for InMemoryNode { - fn default() -> Self { - InMemoryNode::new(None, None, InMemoryNodeConfig::default()) - } -} - -impl InMemoryNode { - pub fn new( - fork: Option>, - observability: Option, - config: InMemoryNodeConfig, - ) -> Self { - let inner = if let Some(f) = &fork { - let mut block_hashes = HashMap::::new(); - block_hashes.insert(f.l2_block.number.as_u64(), f.l2_block.hash); - let mut blocks = HashMap::>::new(); - blocks.insert(f.l2_block.hash, f.l2_block.clone()); - - InMemoryNodeInner { - current_timestamp: f.block_timestamp, - current_batch: f.l1_block.0, - current_miniblock: f.l2_miniblock, - current_miniblock_hash: f.l2_miniblock_hash, - l1_gas_price: f.l1_gas_price, - tx_results: Default::default(), - blocks, - block_hashes, - filters: Default::default(), - fork_storage: ForkStorage::new(fork, &config.system_contracts_options), - show_calls: config.show_calls, - show_storage_logs: config.show_storage_logs, - show_vm_details: config.show_vm_details, - show_gas_details: config.show_gas_details, - resolve_hashes: config.resolve_hashes, - console_log_handler: ConsoleLogHandler::default(), - system_contracts: SystemContracts::from_options(&config.system_contracts_options), - impersonated_accounts: Default::default(), - rich_accounts: HashSet::new(), - previous_states: Default::default(), - observability, - } - } else { - let mut block_hashes = HashMap::::new(); - block_hashes.insert(0, H256::zero()); - let mut blocks = HashMap::>::new(); - blocks.insert( - H256::zero(), - create_empty_block(0, NON_FORK_FIRST_BLOCK_TIMESTAMP, 0), - ); - - InMemoryNodeInner { - current_timestamp: NON_FORK_FIRST_BLOCK_TIMESTAMP, - current_batch: 0, - current_miniblock: 0, - current_miniblock_hash: H256::zero(), - l1_gas_price: L1_GAS_PRICE, - tx_results: Default::default(), - blocks, - block_hashes, - filters: Default::default(), - fork_storage: ForkStorage::new(fork, &config.system_contracts_options), - show_calls: config.show_calls, - show_storage_logs: config.show_storage_logs, - show_vm_details: config.show_vm_details, - show_gas_details: config.show_gas_details, - resolve_hashes: config.resolve_hashes, - console_log_handler: ConsoleLogHandler::default(), - system_contracts: SystemContracts::from_options(&config.system_contracts_options), - impersonated_accounts: Default::default(), - rich_accounts: HashSet::new(), - previous_states: Default::default(), - observability, - } - }; - - InMemoryNode { - inner: Arc::new(RwLock::new(inner)), - } - } - - pub fn get_inner(&self) -> Arc>> { - self.inner.clone() - } - - /// Applies multiple transactions - but still one per L1 batch. - pub fn apply_txs(&self, txs: Vec) -> Result<(), String> { - tracing::info!("Running {:?} transactions (one per batch)", txs.len()); - - for tx in txs { - self.run_l2_tx(tx, TxExecutionMode::VerifyExecute)?; - } - - Ok(()) - } - - /// Adds a lot of tokens to a given account. - pub fn set_rich_account(&self, address: H160) { - let key = storage_key_for_eth_balance(&address); - - let mut inner = match self.inner.write() { - Ok(guard) => guard, - Err(e) => { - tracing::info!("Failed to acquire write lock: {}", e); - return; - } - }; - - let keys = { - let mut storage_view = StorageView::new(&inner.fork_storage); - storage_view.set_value(key, u256_to_h256(U256::from(10u128.pow(30)))); - storage_view.modified_storage_keys().clone() - }; - - for (key, value) in keys.iter() { - inner.fork_storage.set_value(*key, *value); - } - inner.rich_accounts.insert(address); - } - - /// Runs L2 'eth call' method - that doesn't commit to a block. - fn run_l2_call(&self, mut l2_tx: L2Tx) -> Result { - let execution_mode = TxExecutionMode::EthCall; - - let inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - - let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); - - let bootloader_code = inner.system_contracts.contracts_for_l2_call(); - - // init vm - - let (batch_env, _) = inner.create_l1_batch_env(storage.clone()); - let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); - - let mut vm = Vm::new(batch_env, system_env, storage, HistoryDisabled); - - // We must inject *some* signature (otherwise bootloader code fails to generate hash). - if l2_tx.common_data.signature.is_empty() { - l2_tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); - } - - let tx: Transaction = l2_tx.into(); - vm.push_transaction(tx); - - let call_tracer_result = Arc::new(OnceCell::default()); - - let custom_tracers = - vec![ - Box::new(CallTracer::new(call_tracer_result.clone(), HistoryDisabled)) - as Box>, HistoryDisabled>>, - ]; - - let tx_result = vm.inspect(custom_tracers, vm::VmExecutionMode::OneTx); - - let call_traces = Arc::try_unwrap(call_tracer_result) - .unwrap() - .take() - .unwrap_or_default(); - - match &tx_result.result { - ExecutionResult::Success { output } => { - tracing::info!("Call: {}", "SUCCESS".green()); - let output_bytes = zksync_basic_types::Bytes::from(output.clone()); - tracing::info!("Output: {}", serde_json::to_string(&output_bytes).unwrap()); - } - ExecutionResult::Revert { output } => { - tracing::info!("Call: {}: {}", "FAILED".red(), output); - } - ExecutionResult::Halt { reason } => { - tracing::info!("Call: {} {}", "HALTED".red(), reason) - } - }; - - tracing::info!("=== Console Logs: "); - for call in &call_traces { - inner.console_log_handler.handle_call_recursive(call); - } - - tracing::info!("=== Call traces:"); - for call in &call_traces { - formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); - } - - Ok(tx_result.result) - } - - fn display_detailed_gas_info( - &self, - bootloader_debug_result: Option<&eyre::Result>, - spent_on_pubdata: u32, - ) -> eyre::Result<(), String> { - if let Some(bootloader_result) = bootloader_debug_result { - let bootloader_debug = bootloader_result.clone()?; - - tracing::info!("┌─────────────────────────┐"); - tracing::info!("│ GAS DETAILS │"); - tracing::info!("└─────────────────────────┘"); - - // Total amount of gas (should match tx.gas_limit). - let total_gas_limit = bootloader_debug - .total_gas_limit_from_user - .saturating_sub(bootloader_debug.reserved_gas); - - let intrinsic_gas = total_gas_limit - bootloader_debug.gas_limit_after_intrinsic; - let gas_for_validation = - bootloader_debug.gas_limit_after_intrinsic - bootloader_debug.gas_after_validation; - - let gas_spent_on_compute = bootloader_debug.gas_spent_on_execution - - bootloader_debug.gas_spent_on_bytecode_preparation; - - let gas_used = intrinsic_gas - + gas_for_validation - + bootloader_debug.gas_spent_on_bytecode_preparation - + gas_spent_on_compute; - - tracing::info!( - "Gas - Limit: {} | Used: {} | Refunded: {}", - to_human_size(total_gas_limit), - to_human_size(gas_used), - to_human_size(bootloader_debug.refund_by_operator) - ); - - if bootloader_debug.total_gas_limit_from_user != total_gas_limit { - tracing::info!( - "{}", - format!( - " WARNING: user actually provided more gas {}, but system had a lower max limit.", - to_human_size(bootloader_debug.total_gas_limit_from_user) - ) - .yellow() - ); - } - if bootloader_debug.refund_computed != bootloader_debug.refund_by_operator { - tracing::info!( - "{}", - format!( - " WARNING: Refund by VM: {}, but operator refunded more: {}", - to_human_size(bootloader_debug.refund_computed), - to_human_size(bootloader_debug.refund_by_operator) - ) - .yellow() - ); - } - - if bootloader_debug.refund_computed + gas_used != total_gas_limit { - tracing::info!( - "{}", - format!( - " WARNING: Gas totals don't match. {} != {} , delta: {}", - to_human_size(bootloader_debug.refund_computed + gas_used), - to_human_size(total_gas_limit), - to_human_size( - total_gas_limit.abs_diff(bootloader_debug.refund_computed + gas_used) - ) - ) - .yellow() - ); - } - - let bytes_published = spent_on_pubdata / bootloader_debug.gas_per_pubdata.as_u32(); - - tracing::info!( - "During execution published {} bytes to L1, @{} each - in total {} gas", - to_human_size(bytes_published.into()), - to_human_size(bootloader_debug.gas_per_pubdata), - to_human_size(spent_on_pubdata.into()) - ); - - tracing::info!("Out of {} gas used, we spent:", to_human_size(gas_used)); - tracing::info!( - " {:>15} gas ({:>2}%) for transaction setup", - to_human_size(intrinsic_gas), - to_human_size(intrinsic_gas * 100 / gas_used) - ); - tracing::info!( - " {:>15} gas ({:>2}%) for bytecode preparation (decompression etc)", - to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation), - to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation * 100 / gas_used) - ); - tracing::info!( - " {:>15} gas ({:>2}%) for account validation", - to_human_size(gas_for_validation), - to_human_size(gas_for_validation * 100 / gas_used) - ); - tracing::info!( - " {:>15} gas ({:>2}%) for computations (opcodes)", - to_human_size(gas_spent_on_compute), - to_human_size(gas_spent_on_compute * 100 / gas_used) - ); - - tracing::info!(""); - tracing::info!(""); - tracing::info!( - "{}", - "=== Transaction setup cost breakdown ===".to_owned().bold(), - ); - - tracing::info!("Total cost: {}", to_human_size(intrinsic_gas).bold()); - tracing::info!( - " {:>15} gas ({:>2}%) fixed cost", - to_human_size(bootloader_debug.intrinsic_overhead), - to_human_size(bootloader_debug.intrinsic_overhead * 100 / intrinsic_gas) - ); - tracing::info!( - " {:>15} gas ({:>2}%) operator cost", - to_human_size(bootloader_debug.operator_overhead), - to_human_size(bootloader_debug.operator_overhead * 100 / intrinsic_gas) - ); - - tracing::info!(""); - tracing::info!( - " FYI: operator could have charged up to: {}, so you got {}% discount", - to_human_size(bootloader_debug.required_overhead), - to_human_size( - (bootloader_debug.required_overhead - bootloader_debug.operator_overhead) * 100 - / bootloader_debug.required_overhead - ) - ); - - let publish_block_l1_bytes = BLOCK_OVERHEAD_PUBDATA; - tracing::info!( - "Publishing full block costs the operator up to: {}, where {} is due to {} bytes published to L1", - to_human_size(bootloader_debug.total_overhead_for_block), - to_human_size(bootloader_debug.gas_per_pubdata * publish_block_l1_bytes), - to_human_size(publish_block_l1_bytes.into()) - ); - tracing::info!("Your transaction has contributed to filling up the block in the following way (we take the max contribution as the cost):"); - tracing::info!( - " Circuits overhead:{:>15} ({}% of the full block: {})", - to_human_size(bootloader_debug.overhead_for_circuits), - to_human_size( - bootloader_debug.overhead_for_circuits * 100 - / bootloader_debug.total_overhead_for_block - ), - to_human_size(bootloader_debug.total_overhead_for_block) - ); - tracing::info!( - " Length overhead: {:>15}", - to_human_size(bootloader_debug.overhead_for_length) - ); - tracing::info!( - " Slot overhead: {:>15}", - to_human_size(bootloader_debug.overhead_for_slot) - ); - Ok(()) - } else { - Err("Booloader tracer didn't finish.".to_owned()) - } - } - - /// Executes the given L2 transaction and returns all the VM logs. - pub fn run_l2_tx_inner( - &self, - l2_tx: L2Tx, - execution_mode: TxExecutionMode, - ) -> Result { - let inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - - let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); - - let (batch_env, block_ctx) = inner.create_l1_batch_env(storage.clone()); - - let bootloader_code = { - if inner - .impersonated_accounts - .contains(&l2_tx.common_data.initiator_address) - { - tracing::info!( - "🕵️ Executing tx from impersonated account {:?}", - l2_tx.common_data.initiator_address - ); - inner.system_contracts.contracts(execution_mode, true) - } else { - inner.system_contracts.contracts(execution_mode, false) - } - }; - let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); - - let mut vm = Vm::new( - batch_env.clone(), - system_env, - storage.clone(), - HistoryDisabled, - ); - - let tx: Transaction = l2_tx.clone().into(); - - vm.push_transaction(tx.clone()); - - let call_tracer_result = Arc::new(OnceCell::default()); - let bootloader_debug_result = Arc::new(OnceCell::default()); - - let custom_tracers = vec![ - Box::new(CallTracer::new(call_tracer_result.clone(), HistoryDisabled)) - as Box>, HistoryDisabled>>, - Box::new(BootloaderDebugTracer { - result: bootloader_debug_result.clone(), - }) as Box>, HistoryDisabled>>, - ]; - - let tx_result = vm.inspect(custom_tracers, vm::VmExecutionMode::OneTx); - - let call_traces = call_tracer_result.get().unwrap(); - - let spent_on_pubdata = - tx_result.statistics.gas_used - tx_result.statistics.computational_gas_used; - - tracing::info!("┌─────────────────────────┐"); - tracing::info!("│ TRANSACTION SUMMARY │"); - tracing::info!("└─────────────────────────┘"); - - match &tx_result.result { - ExecutionResult::Success { .. } => tracing::info!("Transaction: {}", "SUCCESS".green()), - ExecutionResult::Revert { .. } => tracing::info!("Transaction: {}", "FAILED".red()), - ExecutionResult::Halt { .. } => tracing::info!("Transaction: {}", "HALTED".red()), - } - - tracing::info!("Initiator: {:?}", tx.initiator_account()); - tracing::info!("Payer: {:?}", tx.payer()); - tracing::info!( - "Gas - Limit: {} | Used: {} | Refunded: {}", - to_human_size(tx.gas_limit()), - to_human_size(tx.gas_limit() - tx_result.refunds.gas_refunded), - to_human_size(tx_result.refunds.gas_refunded.into()) - ); - - match inner.show_gas_details { - ShowGasDetails::None => tracing::info!( - "Use --show-gas-details flag or call config_setShowGasDetails to display more info" - ), - ShowGasDetails::All => { - if self - .display_detailed_gas_info(bootloader_debug_result.get(), spent_on_pubdata) - .is_err() - { - tracing::info!( - "{}", - "!!! FAILED TO GET DETAILED GAS INFO !!!".to_owned().red() - ); - } - } - } - - if inner.show_storage_logs != ShowStorageLogs::None { - tracing::info!(""); - tracing::info!("┌──────────────────┐"); - tracing::info!("│ STORAGE LOGS │"); - tracing::info!("└──────────────────┘"); - } - - for log_query in &tx_result.logs.storage_logs { - match inner.show_storage_logs { - ShowStorageLogs::Write => { - if matches!( - log_query.log_type, - StorageLogQueryType::RepeatedWrite | StorageLogQueryType::InitialWrite - ) { - formatter::print_logs(log_query); - } - } - ShowStorageLogs::Read => { - if log_query.log_type == StorageLogQueryType::Read { - formatter::print_logs(log_query); - } - } - ShowStorageLogs::All => { - formatter::print_logs(log_query); - } - _ => {} - } - } - - if inner.show_vm_details != ShowVMDetails::None { - formatter::print_vm_details(&tx_result); - } - - tracing::info!(""); - tracing::info!("==== Console logs: "); - for call in call_traces { - inner.console_log_handler.handle_call_recursive(call); - } - tracing::info!(""); - let call_traces_count = if !call_traces.is_empty() { - // All calls/sub-calls are stored within the first call trace - call_traces[0].calls.len() - } else { - 0 - }; - tracing::info!( - "==== {} Use --show-calls flag or call config_setShowCalls to display more info.", - format!("{:?} call traces. ", call_traces_count).bold() - ); - - if inner.show_calls != ShowCalls::None { - for call in call_traces { - formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); - } - } - tracing::info!(""); - tracing::info!( - "==== {}", - format!("{} events", tx_result.logs.events.len()).bold() - ); - for event in &tx_result.logs.events { - formatter::print_event(event, inner.resolve_hashes); - } - - // The computed block hash here will be different than that in production. - let hash = compute_hash(block_ctx.miniblock, l2_tx.hash()); - - let mut transaction = zksync_types::api::Transaction::from(l2_tx); - let block_hash = inner - .block_hashes - .get(&inner.current_miniblock) - .ok_or(format!( - "Block hash not found for block: {}", - inner.current_miniblock - ))?; - transaction.block_hash = Some(*block_hash); - transaction.block_number = Some(U64::from(inner.current_miniblock)); - - let block = Block { - hash, - number: U64::from(block_ctx.miniblock), - timestamp: U256::from(batch_env.timestamp), - l1_batch_number: Some(U64::from(batch_env.number.0)), - transactions: vec![TransactionVariant::Full(transaction)], - gas_used: U256::from(tx_result.statistics.gas_used), - gas_limit: U256::from(BLOCK_GAS_LIMIT), - ..Default::default() - }; - - tracing::info!(""); - tracing::info!(""); - - let bytecodes = vm - .get_last_tx_compressed_bytecodes() - .iter() - .map(|b| bytecode_to_factory_dep(b.original.clone())) - .collect(); - - vm.execute(vm::VmExecutionMode::Bootloader); - - let modified_keys = storage.borrow().modified_storage_keys().clone(); - Ok(( - modified_keys, - tx_result, - call_traces.clone(), - block, - bytecodes, - block_ctx, - )) - } - - /// Runs L2 transaction and commits it to a new block. - fn run_l2_tx(&self, l2_tx: L2Tx, execution_mode: TxExecutionMode) -> Result<(), String> { - let tx_hash = l2_tx.hash(); - tracing::info!(""); - tracing::info!("Executing {}", format!("{:?}", tx_hash).bold()); - - { - let mut inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - inner.filters.notify_new_pending_transaction(tx_hash); - } - - let (keys, result, call_traces, block, bytecodes, block_ctx) = - self.run_l2_tx_inner(l2_tx.clone(), execution_mode)?; - - if let ExecutionResult::Halt { reason } = result.result { - // Halt means that something went really bad with the transaction execution (in most cases invalid signature, - // but it could also be bootloader panic etc). - // In such case, we should not persist the VM data, and we should pretend that transaction never existed. - return Err(format!("Transaction HALT: {}", reason)); - } - // Write all the mutated keys (storage slots). - let mut inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - for (key, value) in keys.iter() { - inner.fork_storage.set_value(*key, *value); - } - - // Write all the factory deps. - for (hash, code) in bytecodes.iter() { - inner.fork_storage.store_factory_dep( - u256_to_h256(*hash), - code.iter() - .flat_map(|entry| { - let mut bytes = vec![0u8; 32]; - entry.to_big_endian(&mut bytes); - bytes.to_vec() - }) - .collect(), - ) - } - - for (log_idx, event) in result.logs.events.iter().enumerate() { - inner.filters.notify_new_log( - &Log { - address: event.address, - topics: event.indexed_topics.clone(), - data: Bytes(event.value.clone()), - block_hash: Some(block.hash), - block_number: Some(block.number), - l1_batch_number: block.l1_batch_number, - transaction_hash: Some(tx_hash), - transaction_index: Some(U64::zero()), - log_index: Some(U256::from(log_idx)), - transaction_log_index: Some(U256::from(log_idx)), - log_type: None, - removed: None, - }, - block.number, - ); - } - let tx_receipt = TransactionReceipt { - transaction_hash: tx_hash, - transaction_index: U64::from(0), - block_hash: Some(block.hash), - block_number: Some(block.number), - l1_batch_tx_index: None, - l1_batch_number: block.l1_batch_number, - from: l2_tx.initiator_account(), - to: Some(l2_tx.recipient_account()), - cumulative_gas_used: Default::default(), - gas_used: Some(l2_tx.common_data.fee.gas_limit - result.refunds.gas_refunded), - contract_address: contract_address_from_tx_result(&result), - logs: result - .logs - .events - .iter() - .enumerate() - .map(|(log_idx, log)| Log { - address: log.address, - topics: log.indexed_topics.clone(), - data: Bytes(log.value.clone()), - block_hash: Some(block.hash), - block_number: Some(block.number), - l1_batch_number: block.l1_batch_number, - transaction_hash: Some(tx_hash), - transaction_index: Some(U64::zero()), - log_index: Some(U256::from(log_idx)), - transaction_log_index: Some(U256::from(log_idx)), - log_type: None, - removed: None, - }) - .collect(), - l2_to_l1_logs: vec![], - status: Some(if result.result.is_failed() { - U64::from(0) - } else { - U64::from(1) - }), - effective_gas_price: Some(L2_GAS_PRICE.into()), - ..Default::default() - }; - let debug = create_debug_output(&l2_tx, &result, call_traces).expect("create debug output"); // OK to unwrap here as Halt is handled above - inner.tx_results.insert( - tx_hash, - TransactionResult { - info: TxExecutionInfo { - tx: l2_tx, - batch_number: block.l1_batch_number.unwrap_or_default().as_u32(), - miniblock_number: block.number.as_u64(), - result, - }, - receipt: tx_receipt, - debug, - }, - ); - - // With the introduction of 'l2 blocks' (and virtual blocks), - // we are adding one l2 block at the end of each batch (to handle things like remaining events etc). - // You can look at insert_fictive_l2_block function in VM to see how this fake block is inserted. - let block_ctx = block_ctx.new_block(); - let empty_block_at_end_of_batch = - create_empty_block(block_ctx.miniblock, block_ctx.timestamp, block_ctx.batch); - - inner.current_batch = inner.current_batch.saturating_add(1); - - for block in vec![block, empty_block_at_end_of_batch] { - // archive current state before we produce new batch/blocks - if let Err(err) = inner.archive_state() { - tracing::error!( - "failed archiving state for block {}: {}", - inner.current_miniblock, - err - ); - } - - inner.current_miniblock = inner.current_miniblock.saturating_add(1); - inner.current_timestamp = inner.current_timestamp.saturating_add(1); - - let actual_l1_batch_number = block - .l1_batch_number - .expect("block must have a l1_batch_number"); - if actual_l1_batch_number.as_u32() != inner.current_batch { - panic!( - "expected next block to have batch_number {}, got {}", - inner.current_batch, - actual_l1_batch_number.as_u32() - ); - } - - if block.number.as_u64() != inner.current_miniblock { - panic!( - "expected next block to have miniblock {}, got {}", - inner.current_miniblock, - block.number.as_u64() - ); - } - - if block.timestamp.as_u64() != inner.current_timestamp { - panic!( - "expected next block to have timestamp {}, got {}", - inner.current_timestamp, - block.timestamp.as_u64() - ); - } - - let block_hash = block.hash; - inner.current_miniblock_hash = block_hash; - inner.block_hashes.insert(block.number.as_u64(), block.hash); - inner.blocks.insert(block.hash, block); - inner.filters.notify_new_block(block_hash); - } - - Ok(()) - } -} - -/// Keeps track of a block's batch number, miniblock number and timestamp. -/// Useful for keeping track of the current context when creating multiple blocks. -pub struct BlockContext { - pub batch: u32, - pub miniblock: u64, - pub timestamp: u64, -} - -impl BlockContext { - /// Create the current instance that represents the latest block. - pub fn from_current(batch: u32, miniblock: u64, timestamp: u64) -> Self { - Self { - batch, - miniblock, - timestamp, - } - } - - /// Create the next batch instance that has all parameters incremented by `1`. - pub fn new_batch(&self) -> Self { - Self { - batch: self.batch.saturating_add(1), - miniblock: self.miniblock.saturating_add(1), - timestamp: self.timestamp.saturating_add(1), - } - } - - /// Create the next batch instance that uses the same batch number, and has all other parameters incremented by `1`. - pub fn new_block(&self) -> BlockContext { - Self { - batch: self.batch, - miniblock: self.miniblock.saturating_add(1), - timestamp: self.timestamp.saturating_add(1), - } - } -} +use crate::{ + filters::{FilterType, LogFilter}, + fork::ForkSource, + namespaces::{EthNamespaceT, EthTestNodeNamespaceT, RpcResult}, + node::{InMemoryNode, TransactionResult, L2_GAS_PRICE, MAX_TX_SIZE, PROTOCOL_VERSION}, + utils::{self, h256_to_u64, not_implemented, IntoBoxedFuture}, +}; -impl EthNamespaceT for InMemoryNode { +impl EthNamespaceT + for InMemoryNode +{ /// Returns the chain ID of the node. - fn chain_id(&self) -> jsonrpc_core::BoxFuture> { - match self.inner.read() { + fn chain_id(&self) -> RpcResult { + match self.get_inner().read() { Ok(inner) => Ok(U64::from(inner.fork_storage.chain_id.as_u64())).into_boxed_future(), Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)).into_boxed_future(), } @@ -1662,8 +55,8 @@ impl EthNamespaceT for fn call( &self, req: zksync_types::transaction_request::CallRequest, - _block: Option, - ) -> jsonrpc_core::BoxFuture> { + _block: Option, + ) -> RpcResult { match L2Tx::from_request(req.into(), MAX_TX_SIZE) { Ok(mut tx) => { tx.common_data.fee.gas_limit = ETH_CALL_GAS_LIMIT.into(); @@ -1730,12 +123,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` that resolves to a `Result` containing the balance of the specified address as a `U256` or a `jsonrpc_core::Error` if an error occurred. - fn get_balance( - &self, - address: zksync_basic_types::Address, - _block: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.inner); + fn get_balance(&self, address: Address, _block: Option) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let balance_key = storage_key_for_standard_token_balance( @@ -1765,17 +154,13 @@ impl EthNamespaceT for /// /// # Returns /// - /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `zksync_types::api::Block`. + /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `Block`. fn get_block_by_number( &self, - block_number: zksync_types::api::BlockNumber, + block_number: BlockNumber, full_transactions: bool, - ) -> BoxFuture< - jsonrpc_core::Result< - Option>, - >, - > { - let inner = Arc::clone(&self.inner); + ) -> RpcResult>> { + let inner = self.get_inner().clone(); Box::pin(async move { let maybe_block = { @@ -1838,7 +223,7 @@ impl EthNamespaceT for Ok(Some(block)) } - None => Err(into_jsrpc_error(Web3Error::NoBlock)), + None => Ok(None), } }) } @@ -1857,9 +242,9 @@ impl EthNamespaceT for fn get_code( &self, address: zksync_basic_types::Address, - _block: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.inner); + _block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let code_key = get_code_key(&address); @@ -1893,9 +278,9 @@ impl EthNamespaceT for fn get_transaction_count( &self, address: zksync_basic_types::Address, - _block: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.inner); + _block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let nonce_key = get_nonce_key(&address); @@ -1922,8 +307,8 @@ impl EthNamespaceT for fn get_transaction_receipt( &self, hash: zksync_basic_types::H256, - ) -> BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = match inner.read() { @@ -1951,8 +336,8 @@ impl EthNamespaceT for fn send_raw_transaction( &self, tx_bytes: zksync_basic_types::Bytes, - ) -> jsonrpc_core::BoxFuture> { - let chain_id = match self.inner.read() { + ) -> RpcResult { + let chain_id = match self.get_inner().read() { Ok(reader) => reader.fork_storage.chain_id, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() @@ -2005,17 +390,13 @@ impl EthNamespaceT for /// /// # Returns /// - /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `zksync_types::api::Block`. + /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `Block`. fn get_block_by_hash( &self, hash: zksync_basic_types::H256, full_transactions: bool, - ) -> jsonrpc_core::BoxFuture< - jsonrpc_core::Result< - Option>, - >, - > { - let inner = Arc::clone(&self.inner); + ) -> RpcResult>> { + let inner = self.get_inner().clone(); Box::pin(async move { let maybe_block = { @@ -2070,7 +451,7 @@ impl EthNamespaceT for Ok(Some(block)) } - None => Err(into_jsrpc_error(Web3Error::NoBlock)), + None => Ok(None), } }) } @@ -2087,8 +468,8 @@ impl EthNamespaceT for fn get_transaction_by_hash( &self, hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2109,7 +490,7 @@ impl EthNamespaceT for from: Some(info.tx.initiator_account()), to: Some(info.tx.recipient_account()), value: info.tx.execute.value, - gas_price: Default::default(), + gas_price: Some(U256::from(0)), gas: Default::default(), input: input_data.data.into(), v: Some(chain_id.into()), @@ -2132,7 +513,7 @@ impl EthNamespaceT for max_priority_fee_per_gas: Some( info.tx.common_data.fee.max_priority_fee_per_gas, ), - chain_id, + chain_id: U256::from(chain_id), l1_batch_number: Some(U64::from(info.batch_number as u64)), l1_batch_tx_index: None, }) @@ -2158,10 +539,8 @@ impl EthNamespaceT for } /// Returns the current block number as a `U64` wrapped in a `BoxFuture`. - fn get_block_number( - &self, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn get_block_number(&self) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2184,9 +563,9 @@ impl EthNamespaceT for fn estimate_gas( &self, req: zksync_types::transaction_request::CallRequest, - _block: Option, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + _block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); let reader = match inner.read() { Ok(r) => r, Err(_) => { @@ -2202,7 +581,7 @@ impl EthNamespaceT for } /// Returns the current gas price in U256 format. - fn gas_price(&self) -> jsonrpc_core::BoxFuture> { + fn gas_price(&self) -> RpcResult { let fair_l2_gas_price: u64 = L2_GAS_PRICE; Ok(U256::from(fair_l2_gas_price)).into_boxed_future() } @@ -2229,8 +608,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn new_filter(&self, filter: Filter) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn new_filter(&self, filter: Filter) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2238,12 +617,8 @@ impl EthNamespaceT for } }; - let from_block = filter - .from_block - .unwrap_or(zksync_types::api::BlockNumber::Latest); - let to_block = filter - .to_block - .unwrap_or(zksync_types::api::BlockNumber::Latest); + let from_block = filter.from_block.unwrap_or(BlockNumber::Latest); + let to_block = filter.to_block.unwrap_or(BlockNumber::Latest); let addresses = filter.address.unwrap_or_default().0; let mut topics: [Option>; 4] = Default::default(); @@ -2272,8 +647,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn new_block_filter(&self) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn new_block_filter(&self) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2294,10 +669,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn new_pending_transaction_filter( - &self, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn new_pending_transaction_filter(&self) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2321,8 +694,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn uninstall_filter(&self, id: U256) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn uninstall_filter(&self, id: U256) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2348,22 +721,16 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an array of logs. - fn get_logs( - &self, - filter: Filter, - ) -> jsonrpc_core::BoxFuture>> { - let reader = match self.inner.read() { + fn get_logs(&self, filter: Filter) -> RpcResult> { + let inner = self.get_inner(); + let reader = match inner.read() { Ok(r) => r, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() } }; - let from_block = filter - .from_block - .unwrap_or(zksync_types::api::BlockNumber::Earliest); - let to_block = filter - .to_block - .unwrap_or(zksync_types::api::BlockNumber::Latest); + let from_block = filter.from_block.unwrap_or(BlockNumber::Earliest); + let to_block = filter.to_block.unwrap_or(BlockNumber::Latest); let addresses = filter.address.unwrap_or_default().0; let mut topics: [Option>; 4] = Default::default(); @@ -2407,11 +774,9 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an array of logs. - fn get_filter_logs( - &self, - id: U256, - ) -> jsonrpc_core::BoxFuture> { - let reader = match self.inner.read() { + fn get_filter_logs(&self, id: U256) -> RpcResult { + let inner = self.get_inner(); + let reader = match inner.read() { Ok(r) => r, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() @@ -2449,14 +814,11 @@ impl EthNamespaceT for /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an array of logs, block hashes, or transaction hashes, /// depending on the filter type, which occurred since last poll. - /// * Filters created with `eth_newFilter` return [Log] objects. + /// * Filters created with `eth_newFilter` return [zksync_types::api::Log] objects. /// * Filters created with `eth_newBlockFilter` return block hashes. /// * Filters created with `eth_newPendingTransactionFilter` return transaction hashes. - fn get_filter_changes( - &self, - id: U256, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn get_filter_changes(&self, id: U256) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2473,9 +835,9 @@ impl EthNamespaceT for fn get_block_transaction_count_by_number( &self, - block_number: zksync_types::api::BlockNumber, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + block_number: BlockNumber, + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let maybe_result = { @@ -2519,8 +881,8 @@ impl EthNamespaceT for fn get_block_transaction_count_by_hash( &self, block_hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2570,9 +932,9 @@ impl EthNamespaceT for &self, address: zksync_basic_types::Address, idx: U256, - block: Option, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let mut writer = match inner.write() { @@ -2586,19 +948,15 @@ impl EthNamespaceT for let block_number = block .map(|block| match block { - zksync_types::api::BlockIdVariant::BlockNumber(block_number) => { - Ok(utils::to_real_block_number( - block_number, - U64::from(writer.current_miniblock), - )) - } - zksync_types::api::BlockIdVariant::BlockNumberObject(o) => { - Ok(utils::to_real_block_number( - o.block_number, - U64::from(writer.current_miniblock), - )) - } - zksync_types::api::BlockIdVariant::BlockHashObject(o) => writer + BlockIdVariant::BlockNumber(block_number) => Ok(utils::to_real_block_number( + block_number, + U64::from(writer.current_miniblock), + )), + BlockIdVariant::BlockNumberObject(o) => Ok(utils::to_real_block_number( + o.block_number, + U64::from(writer.current_miniblock), + )), + BlockIdVariant::BlockHashObject(o) => writer .blocks .get(&o.block_hash) .map(|block| block.number) @@ -2664,8 +1022,8 @@ impl EthNamespaceT for &self, block_hash: zksync_basic_types::H256, index: zksync_basic_types::web3::types::Index, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = match inner.read() { @@ -2727,10 +1085,10 @@ impl EthNamespaceT for /// A `BoxFuture` containing a `jsonrpc_core::Result` that maybe resolves to a [zksync_types::api::Transaction], if found. fn get_transaction_by_block_number_and_index( &self, - block_number: zksync_types::api::BlockNumber, + block_number: BlockNumber, index: zksync_basic_types::web3::types::Index, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = match inner.read() { @@ -2788,15 +1146,12 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to a hex `String` of the version number. - fn protocol_version(&self) -> jsonrpc_core::BoxFuture> { + fn protocol_version(&self) -> RpcResult { Ok(String::from(PROTOCOL_VERSION)).into_boxed_future() } - fn syncing( - &self, - ) -> jsonrpc_core::BoxFuture> - { - Ok(zksync_basic_types::web3::types::SyncState::NotSyncing).into_boxed_future() + fn syncing(&self) -> RpcResult { + Ok(SyncState::NotSyncing).into_boxed_future() } /// Returns a list of available accounts. /// @@ -2809,8 +1164,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to a `Vec` of addresses. - fn accounts(&self) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + fn accounts(&self) -> RpcResult> { + let inner = self.get_inner().clone(); let reader = match inner.read() { Ok(r) => r, Err(_) => { @@ -2822,35 +1177,30 @@ impl EthNamespaceT for futures::future::ok(accounts).boxed() } - fn coinbase( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn coinbase(&self) -> RpcResult { not_implemented("eth_coinbase") } - fn compilers(&self) -> jsonrpc_core::BoxFuture>> { + fn compilers(&self) -> RpcResult> { not_implemented("eth_getCompilers") } - fn hashrate(&self) -> jsonrpc_core::BoxFuture> { + fn hashrate(&self) -> RpcResult { not_implemented("eth_hashrate") } fn get_uncle_count_by_block_hash( &self, _hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> { + ) -> RpcResult> { not_implemented("eth_getUncleCountByBlockHash") } - fn get_uncle_count_by_block_number( - &self, - _number: zksync_types::api::BlockNumber, - ) -> jsonrpc_core::BoxFuture>> { + fn get_uncle_count_by_block_number(&self, _number: BlockNumber) -> RpcResult> { not_implemented("eth_getUncleCountByBlockNumber") } - fn mining(&self) -> jsonrpc_core::BoxFuture> { + fn mining(&self) -> RpcResult { not_implemented("eth_mining") } @@ -2871,10 +1221,10 @@ impl EthNamespaceT for fn fee_history( &self, block_count: U64, - _newest_block: zksync_types::api::BlockNumber, + _newest_block: BlockNumber, reward_percentiles: Vec, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2911,7 +1261,7 @@ impl EthNamespaceT for } } -impl EthTestNodeNamespaceT +impl EthTestNodeNamespaceT for InMemoryNode { /// Sends a transaction to the L2 network. Can be used for the impersonated account. @@ -2927,14 +1277,13 @@ impl EthTestNodeNamespa &self, tx: zksync_types::transaction_request::CallRequest, ) -> jsonrpc_core::BoxFuture> { - let chain_id = match self.inner.read() { + let chain_id = match self.get_inner().read() { Ok(reader) => reader.fork_storage.chain_id, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() } }; - // TODO: refactor the way the transaction is converted let mut tx_req = TransactionRequest::from(tx.clone()); // EIP-1559 gas fields should be processed separately if tx.gas_price.is_some() { @@ -2951,7 +1300,7 @@ impl EthTestNodeNamespa tx_req.transaction_type = Some(zksync_types::EIP_1559_TX_TYPE.into()); } } - // To be successfully converted into l2 tx + // Needed to calculate hash tx_req.r = Some(U256::default()); tx_req.s = Some(U256::default()); tx_req.v = Some(U64::from(27)); @@ -2974,20 +1323,15 @@ impl EthTestNodeNamespa .boxed() } }; - // For non-legacy txs v was overwritten with 0 while converting into l2 tx + + // `v` was overwritten with 0 during converting into l2 tx let mut signature = vec![0u8; 65]; signature[64] = 27; l2_tx.common_data.signature = signature; l2_tx.set_input(bytes, hash); - if hash != l2_tx.hash() { - return futures::future::err(into_jsrpc_error(Web3Error::InvalidTransactionData( - zksync_types::ethabi::Error::InvalidData, - ))) - .boxed(); - }; - match self.inner.read() { + match self.get_inner().read() { Ok(reader) => { if !reader .impersonated_accounts @@ -3005,7 +1349,7 @@ impl EthTestNodeNamespa } match self.run_l2_tx(l2_tx.clone(), TxExecutionMode::VerifyExecute) { - Ok(_) => Ok(hash).into_boxed_future(), + Ok(_) => Ok(l2_tx.hash()).into_boxed_future(), Err(e) => { let error_message = format!("Execution error: {}", e); futures::future::err(into_jsrpc_error(Web3Error::SubmitTransactionError( @@ -3022,18 +1366,20 @@ impl EthTestNodeNamespa mod tests { use crate::{ cache::CacheConfig, + fork::ForkDetails, http_fork_source::HttpForkSource, - node::InMemoryNode, + node::{compute_hash, InMemoryNode, Snapshot}, testing::{ self, default_tx_debug_info, ForkBlockConfig, LogBuilder, MockServer, TransactionResponseBuilder, }, }; use maplit::hashmap; - use zksync_basic_types::Nonce; + use zksync_basic_types::{web3, Nonce}; use zksync_types::{ - api::{BlockHashObject, BlockNumber, BlockNumberObject}, + api::{BlockHashObject, BlockNumber, BlockNumberObject, TransactionReceipt}, utils::deployed_address_create, + PackedEthSignature, }; use zksync_web3_decl::types::{SyncState, ValueOrArray}; @@ -3120,29 +1466,69 @@ mod tests { } #[tokio::test] - async fn test_get_block_by_hash_produces_no_block_error_for_non_existing_block() { + async fn test_get_block_by_hash_returns_none_for_non_existing_block() { let node = InMemoryNode::::default(); - let expected_err = into_jsrpc_error(Web3Error::NoBlock); - let result = node.get_block_by_hash(H256::repeat_byte(0x01), false).await; + let result = node + .get_block_by_hash(H256::repeat_byte(0x01), false) + .await + .expect("failed fetching block by hash"); - assert_eq!(expected_err, result.unwrap_err()); + assert!(result.is_none()); } #[tokio::test] - async fn test_node_run_has_genesis_block() { + async fn test_node_has_genesis_block() { let node = InMemoryNode::::default(); let block = node .get_block_by_number(BlockNumber::Latest, false) .await - .expect("failed fetching block by hash") + .expect("failed fetching block by number") .expect("no block"); assert_eq!(0, block.number.as_u64()); assert_eq!(compute_hash(0, H256::zero()), block.hash); } + #[tokio::test] + async fn test_node_creates_genesis_block_with_hash_and_zero_parent_hash() { + let node = InMemoryNode::::default(); + + let block = node + .get_block_by_hash(compute_hash(0, H256::zero()), false) + .await + .expect("failed fetching block by hash") + .expect("no block"); + + assert_eq!(block.parent_hash, H256::zero()); + } + + #[tokio::test] + async fn test_node_produces_blocks_with_parent_hash_links() { + let node = InMemoryNode::::default(); + testing::apply_tx(&node, H256::repeat_byte(0x01)); + + let genesis_block = node + .get_block_by_number(BlockNumber::from(0), false) + .await + .expect("failed fetching block by number") + .expect("no block"); + let first_block = node + .get_block_by_number(BlockNumber::from(1), false) + .await + .expect("failed fetching block by number") + .expect("no block"); + let second_block = node + .get_block_by_number(BlockNumber::from(2), false) + .await + .expect("failed fetching block by number") + .expect("no block"); + + assert_eq!(genesis_block.hash, first_block.parent_hash); + assert_eq!(first_block.hash, second_block.parent_hash); + } + #[tokio::test] async fn test_get_block_by_hash_for_produced_block() { let node = InMemoryNode::::default(); @@ -3175,7 +1561,8 @@ mod tests { Default::default(), ); - let inner = node.inner.read().unwrap(); + let inner = node.get_inner(); + let inner = inner.read().unwrap(); assert!( inner.blocks.contains_key(&input_block_hash), "block wasn't cached" @@ -3230,15 +1617,15 @@ mod tests { } #[tokio::test] - async fn test_get_block_by_number_produces_no_block_error_for_non_existing_block() { + async fn test_get_block_by_number_returns_none_for_non_existing_block() { let node = InMemoryNode::::default(); - let expected_err = into_jsrpc_error(Web3Error::NoBlock); let result = node .get_block_by_number(BlockNumber::Number(U64::from(42)), false) - .await; + .await + .expect("failed fetching block by number"); - assert_eq!(expected_err, result.unwrap_err()); + assert!(result.is_none()); } #[tokio::test] @@ -3784,17 +2171,18 @@ mod tests { u256_to_h256(U256::zero()), ); let input_storage_value = H256::repeat_byte(0xcd); - node.inner + node.get_inner() .write() .unwrap() .fork_storage .set_value(input_storage_key, input_storage_value); - let initial_miniblock = node.inner.read().unwrap().current_miniblock; + let initial_miniblock = node.get_inner().read().unwrap().current_miniblock; testing::apply_tx(&node, H256::repeat_byte(0x1)); - let current_miniblock = node.inner.read().unwrap().current_miniblock; + let current_miniblock = node.get_inner().read().unwrap().current_miniblock; - let reader = node.inner.read().unwrap(); + let inner = node.get_inner(); + let reader = inner.read().unwrap(); for miniblock in initial_miniblock..current_miniblock { let actual_cached_value = reader .block_hashes @@ -3886,7 +2274,7 @@ mod tests { let input_storage_value = H256::repeat_byte(0xcd); let node = InMemoryNode::::default(); - node.inner + node.get_inner() .write() .map(|mut writer| { let historical_block = Block:: { @@ -3955,7 +2343,7 @@ mod tests { None, Default::default(), ); - node.inner + node.get_inner() .write() .map(|mut writer| { let historical_block = Block:: { @@ -4047,7 +2435,7 @@ mod tests { AccountTreeId::new(deployed_address), u256_to_h256(U256::from(0)), ); - node.inner + node.get_inner() .write() .unwrap() .fork_storage @@ -4085,7 +2473,8 @@ mod tests { // populate tx receipts with 2 tx each having logs { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.tx_results.insert( H256::repeat_byte(0x1), TransactionResult { @@ -4143,7 +2532,8 @@ mod tests { // populate tx receipts with 2 tx each having logs { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.tx_results.insert( H256::repeat_byte(0x1), TransactionResult { @@ -4171,7 +2561,8 @@ mod tests { // populate tx receipts with 2 tx each having logs { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.tx_results.insert( H256::repeat_byte(0x1), TransactionResult { @@ -4257,7 +2648,8 @@ mod tests { #[tokio::test] async fn test_snapshot() { let node = InMemoryNode::::default(); - let mut inner = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut inner = inner.write().unwrap(); inner .blocks @@ -4291,11 +2683,11 @@ mod tests { let storage = inner.fork_storage.inner.read().unwrap(); let expected_snapshot = Snapshot { - current_timestamp: inner.current_timestamp.clone(), - current_batch: inner.current_batch.clone(), - current_miniblock: inner.current_miniblock.clone(), - current_miniblock_hash: inner.current_miniblock_hash.clone(), - l1_gas_price: inner.l1_gas_price.clone(), + current_timestamp: inner.current_timestamp, + current_batch: inner.current_batch, + current_miniblock: inner.current_miniblock, + current_miniblock_hash: inner.current_miniblock_hash, + l1_gas_price: inner.l1_gas_price, tx_results: inner.tx_results.clone(), blocks: inner.blocks.clone(), block_hashes: inner.block_hashes.clone(), @@ -4359,7 +2751,8 @@ mod tests { #[tokio::test] async fn test_snapshot_restore() { let node = InMemoryNode::::default(); - let mut inner = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut inner = inner.write().unwrap(); inner .blocks @@ -4394,11 +2787,11 @@ mod tests { let expected_snapshot = { let storage = inner.fork_storage.inner.read().unwrap(); Snapshot { - current_timestamp: inner.current_timestamp.clone(), - current_batch: inner.current_batch.clone(), - current_miniblock: inner.current_miniblock.clone(), - current_miniblock_hash: inner.current_miniblock_hash.clone(), - l1_gas_price: inner.l1_gas_price.clone(), + current_timestamp: inner.current_timestamp, + current_batch: inner.current_batch, + current_miniblock: inner.current_miniblock, + current_miniblock_hash: inner.current_miniblock_hash, + l1_gas_price: inner.l1_gas_price, tx_results: inner.tx_results.clone(), blocks: inner.blocks.clone(), block_hashes: inner.block_hashes.clone(), @@ -4558,7 +2951,8 @@ mod tests { // store the block info with just the tx hash invariant { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.blocks.insert( input_block_hash, Block { @@ -4707,7 +3101,8 @@ mod tests { // store the block info with just the tx hash invariant { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer .block_hashes .insert(input_block_number.as_u64(), input_block_hash); @@ -4730,7 +3125,7 @@ mod tests { .expect("no transaction"); assert_eq!(input_tx_hash, actual_tx.hash); - assert_eq!(Some(U64::from(input_block_number)), actual_tx.block_number); + assert_eq!(Some(input_block_number), actual_tx.block_number); } #[tokio::test] @@ -4756,7 +3151,7 @@ mod tests { TransactionResponseBuilder::new() .set_hash(input_tx_hash) .set_block_hash(input_block_hash) - .set_block_number(U64::from(input_block_number)) + .set_block_number(input_block_number) .build(), ); diff --git a/src/node/evm.rs b/src/node/evm.rs new file mode 100644 index 00000000..71af8c19 --- /dev/null +++ b/src/node/evm.rs @@ -0,0 +1,68 @@ +use zksync_basic_types::U64; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{EvmNamespaceT, RpcResult}, + node::InMemoryNode, + utils::IntoBoxedFuture, +}; + +impl EvmNamespaceT + for InMemoryNode +{ + fn increase_time(&self, time_delta_seconds: u64) -> RpcResult { + self.increase_time(time_delta_seconds) + .map_err(|err| { + tracing::error!("failed increasing time: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn evm_mine(&self) -> RpcResult { + self.mine_block() + .map_err(|err| { + tracing::error!("failed mining block: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_next_block_timestamp(&self, timestamp: u64) -> RpcResult { + self.set_next_block_timestamp(timestamp) + .map_err(|err| { + tracing::error!("failed setting time for next timestamp: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_time(&self, time: u64) -> RpcResult { + self.set_time(time) + .map_err(|err| { + tracing::error!("failed setting time: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn snapshot(&self) -> RpcResult { + self.snapshot() + .map_err(|err| { + tracing::error!("failed creating snapshot: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn revert_snapshot(&self, snapshot_id: U64) -> RpcResult { + self.revert_snapshot(snapshot_id) + .map_err(|err| { + tracing::error!("failed reverting snapshot: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } +} diff --git a/src/node/hardhat.rs b/src/node/hardhat.rs new file mode 100644 index 00000000..23abda98 --- /dev/null +++ b/src/node/hardhat.rs @@ -0,0 +1,68 @@ +use zksync_basic_types::{Address, U256, U64}; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{HardhatNamespaceT, RpcResult}, + node::InMemoryNode, + utils::IntoBoxedFuture, +}; + +impl HardhatNamespaceT + for InMemoryNode +{ + fn set_balance(&self, address: Address, balance: U256) -> RpcResult { + self.set_balance(address, balance) + .map_err(|err| { + tracing::error!("failed setting balance : {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_nonce(&self, address: Address, balance: U256) -> RpcResult { + self.set_nonce(address, balance) + .map_err(|err| { + tracing::error!("failed setting nonce: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn hardhat_mine(&self, num_blocks: Option, interval: Option) -> RpcResult { + self.mine_blocks(num_blocks, interval) + .map_err(|err| { + tracing::error!("failed mining blocks: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn impersonate_account(&self, address: Address) -> RpcResult { + self.impersonate_account(address) + .map_err(|err| { + tracing::error!("failed impersonating account: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn stop_impersonating_account(&self, address: Address) -> RpcResult { + InMemoryNode::::stop_impersonating_account(self, address) + .map_err(|err| { + tracing::error!("failed stopping to impersonate account: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_code(&self, address: Address, code: Vec) -> RpcResult<()> { + self.set_code(address, code) + .map_err(|err| { + tracing::error!("failed setting code: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } +} diff --git a/src/node/in_memory.rs b/src/node/in_memory.rs new file mode 100644 index 00000000..766f5d72 --- /dev/null +++ b/src/node/in_memory.rs @@ -0,0 +1,1834 @@ +//! In-memory node, that supports forking other networks. +use crate::{ + bootloader_debug::{BootloaderDebug, BootloaderDebugTracer}, + console_log::ConsoleLogHandler, + deps::InMemoryStorage, + filters::EthFilters, + fork::{ForkDetails, ForkSource, ForkStorage}, + formatter, + observability::Observability, + system_contracts::{self, SystemContracts}, + utils::{ + adjust_l1_gas_price_for_tx, bytecode_to_factory_dep, create_debug_output, to_human_size, + }, +}; +use clap::Parser; +use colored::Colorize; +use core::fmt::Display; +use indexmap::IndexMap; +use once_cell::sync::OnceCell; +use std::{ + cmp::{self}, + collections::{HashMap, HashSet}, + str::FromStr, + sync::{Arc, RwLock}, +}; + +use multivm::interface::{ + ExecutionResult, L1BatchEnv, L2BlockEnv, SystemEnv, TxExecutionMode, VmExecutionMode, + VmExecutionResultAndLogs, VmInterface, +}; +use multivm::{ + tracers::CallTracer, + vm_latest::HistoryDisabled, + vm_latest::{ + constants::{BLOCK_GAS_LIMIT, BLOCK_OVERHEAD_PUBDATA, MAX_PUBDATA_PER_BLOCK}, + utils::{ + fee::derive_base_fee_and_gas_per_pubdata, + l2_blocks::load_last_l2_block, + overhead::{derive_overhead, OverheadCoefficients}, + }, + ToTracerPointer, TracerPointer, Vm, + }, +}; +use zksync_basic_types::{ + web3::signing::keccak256, Address, Bytes, L1BatchNumber, MiniblockNumber, H160, H256, U256, U64, +}; +use zksync_contracts::BaseSystemContracts; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_state::{ReadStorage, StoragePtr, StorageView, WriteStorage}; +use zksync_types::{ + api::{Block, DebugCall, Log, TransactionReceipt, TransactionVariant}, + block::legacy_miniblock_hash, + fee::Fee, + get_nonce_key, + l2::L2Tx, + l2::TransactionType, + utils::{decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance}, + vm_trace::Call, + PackedEthSignature, StorageKey, StorageLogQueryType, StorageValue, Transaction, + ACCOUNT_CODE_STORAGE_ADDRESS, EIP_712_TX_TYPE, MAX_GAS_PER_PUBDATA_BYTE, MAX_L2_TX_GAS_LIMIT, +}; +use zksync_utils::{ + bytecode::{compress_bytecode, hash_bytecode}, + h256_to_account_address, h256_to_u256, u256_to_h256, +}; +use zksync_web3_decl::error::Web3Error; + +/// Max possible size of an ABI encoded tx (in bytes). +pub const MAX_TX_SIZE: usize = 1_000_000; +/// Timestamp of the first block (if not running in fork mode). +pub const NON_FORK_FIRST_BLOCK_TIMESTAMP: u64 = 1_000; +/// Network ID we use for the test node. +pub const TEST_NODE_NETWORK_ID: u32 = 260; +/// L1 Gas Price. +pub const L1_GAS_PRICE: u64 = 50_000_000_000; +/// L2 Gas Price (0.25 gwei). +pub const L2_GAS_PRICE: u64 = 250_000_000; +/// L1 Gas Price Scale Factor for gas estimation. +pub const ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR: f64 = 1.2; +/// The max possible number of gas that `eth_estimateGas` is allowed to overestimate. +pub const ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD: u32 = 100; +/// Acceptable gas overestimation limit. +pub const ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION: u32 = 1_000; +/// The factor by which to scale the gasLimit. +pub const ESTIMATE_GAS_SCALE_FACTOR: f32 = 1.3; +/// The maximum number of previous blocks to store the state for. +pub const MAX_PREVIOUS_STATES: u16 = 128; +/// The zks protocol version. +pub const PROTOCOL_VERSION: &str = "zks/1"; + +pub fn compute_hash(block_number: u64, tx_hash: H256) -> H256 { + let digest = [&block_number.to_be_bytes()[..], tx_hash.as_bytes()].concat(); + H256(keccak256(&digest)) +} + +pub fn create_empty_block( + block_number: u64, + timestamp: u64, + batch: u32, + parent_block_hash: Option, +) -> Block { + let hash = compute_hash(block_number, H256::zero()); + let parent_hash = parent_block_hash.unwrap_or(if block_number == 0 { + H256::zero() + } else { + compute_hash(block_number - 1, H256::zero()) + }); + Block { + hash, + parent_hash, + number: U64::from(block_number), + timestamp: U256::from(timestamp), + l1_batch_number: Some(U64::from(batch)), + transactions: vec![], + gas_used: U256::from(0), + gas_limit: U256::from(BLOCK_GAS_LIMIT), + ..Default::default() + } +} + +/// Information about the executed transaction. +#[derive(Debug, Clone)] +pub struct TxExecutionInfo { + pub tx: L2Tx, + // Batch number where transaction was executed. + pub batch_number: u32, + pub miniblock_number: u64, + pub result: VmExecutionResultAndLogs, +} + +#[derive(Debug, Default, clap::Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowCalls { + #[default] + None, + User, + System, + All, +} + +impl FromStr for ShowCalls { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowCalls::None), + "user" => Ok(ShowCalls::User), + "system" => Ok(ShowCalls::System), + "all" => Ok(ShowCalls::All), + _ => Err(format!( + "Unknown ShowCalls value {} - expected one of none|user|system|all.", + s + )), + } + } +} + +impl Display for ShowCalls { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowStorageLogs { + #[default] + None, + Read, + Write, + All, +} + +impl FromStr for ShowStorageLogs { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowStorageLogs::None), + "read" => Ok(ShowStorageLogs::Read), + "write" => Ok(ShowStorageLogs::Write), + "all" => Ok(ShowStorageLogs::All), + _ => Err(format!( + "Unknown ShowStorageLogs value {} - expected one of none|read|write|all.", + s + )), + } + } +} + +impl Display for ShowStorageLogs { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowVMDetails { + #[default] + None, + All, +} + +impl FromStr for ShowVMDetails { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowVMDetails::None), + "all" => Ok(ShowVMDetails::All), + _ => Err(format!( + "Unknown ShowVMDetails value {} - expected one of none|all.", + s + )), + } + } +} + +impl Display for ShowVMDetails { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowGasDetails { + #[default] + None, + All, +} + +impl FromStr for ShowGasDetails { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowGasDetails::None), + "all" => Ok(ShowGasDetails::All), + _ => Err(format!( + "Unknown ShowGasDetails value {} - expected one of none|all.", + s + )), + } + } +} + +impl Display for ShowGasDetails { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Clone)] +pub struct TransactionResult { + pub info: TxExecutionInfo, + pub receipt: TransactionReceipt, + pub debug: DebugCall, +} + +impl TransactionResult { + /// Returns the debug information for the transaction. + /// If `only_top` is true - will only return the top level call. + pub fn debug_info(&self, only_top: bool) -> DebugCall { + let calls = if only_top { + vec![] + } else { + self.debug.calls.clone() + }; + DebugCall { + calls, + ..self.debug.clone() + } + } +} + +/// Helper struct for InMemoryNode. +/// S - is the Source of the Fork. +#[derive(Clone)] +pub struct InMemoryNodeInner { + /// The latest timestamp that was already generated. + /// Next block will be current_timestamp + 1 + pub current_timestamp: u64, + /// The latest batch number that was already generated. + /// Next block will be current_batch + 1 + pub current_batch: u32, + /// The latest miniblock number that was already generated. + /// Next transaction will go to the block current_miniblock + 1 + pub current_miniblock: u64, + /// The latest miniblock hash. + pub current_miniblock_hash: H256, + pub l1_gas_price: u64, + // Map from transaction to details about the exeuction + pub tx_results: HashMap, + // Map from block hash to information about the block. + pub blocks: HashMap>, + // Map from block number to a block hash. + pub block_hashes: HashMap, + // Map from filter_id to the eth filter + pub filters: EthFilters, + // Underlying storage + pub fork_storage: ForkStorage, + // Debug level information. + pub show_calls: ShowCalls, + // Displays storage logs. + pub show_storage_logs: ShowStorageLogs, + // Displays VM details. + pub show_vm_details: ShowVMDetails, + // Gas details information. + pub show_gas_details: ShowGasDetails, + // If true - will contact openchain to resolve the ABI to function names. + pub resolve_hashes: bool, + pub console_log_handler: ConsoleLogHandler, + pub system_contracts: SystemContracts, + pub impersonated_accounts: HashSet
, + pub rich_accounts: HashSet, + /// Keeps track of historical states indexed via block hash. Limited to [MAX_PREVIOUS_STATES]. + pub previous_states: IndexMap>, + /// An optional handle to the observability stack + pub observability: Option, +} + +type L2TxResult = ( + HashMap, + VmExecutionResultAndLogs, + Vec, + Block, + HashMap>, + BlockContext, +); + +impl InMemoryNodeInner { + pub fn create_l1_batch_env( + &self, + storage: StoragePtr, + ) -> (L1BatchEnv, BlockContext) { + let last_l2_block_hash = if let Some(last_l2_block) = load_last_l2_block(storage) { + last_l2_block.hash + } else { + // This is the scenario of either the first L2 block ever or + // the first block after the upgrade for support of L2 blocks. + legacy_miniblock_hash(MiniblockNumber(self.current_miniblock as u32)) + }; + let block_ctx = BlockContext::from_current( + self.current_batch, + self.current_miniblock, + self.current_timestamp, + ); + let block_ctx = block_ctx.new_batch(); + let batch_env = L1BatchEnv { + // TODO: set the previous batch hash properly (take from fork, when forking, and from local storage, when this is not the first block). + previous_batch_hash: None, + number: L1BatchNumber::from(block_ctx.batch), + timestamp: block_ctx.timestamp, + l1_gas_price: self.l1_gas_price, + fair_l2_gas_price: L2_GAS_PRICE, + fee_account: H160::zero(), + enforced_base_fee: None, + first_l2_block: L2BlockEnv { + // the 'current_miniblock' contains the block that was already produced. + // So the next one should be one higher. + number: block_ctx.miniblock as u32, + timestamp: block_ctx.timestamp, + prev_block_hash: last_l2_block_hash, + // This is only used during zksyncEra block timestamp/number transition. + // In case of starting a new network, it doesn't matter. + // In theory , when forking mainnet, we should match this value + // to the value that was set in the node at that time - but AFAIK + // we don't have any API for this - so this might result in slightly + // incorrect replays of transacions during the migration period, that + // depend on block number or timestamp. + max_virtual_blocks_to_create: 1, + }, + }; + + (batch_env, block_ctx) + } + + pub fn create_system_env( + &self, + base_system_contracts: BaseSystemContracts, + execution_mode: TxExecutionMode, + ) -> SystemEnv { + SystemEnv { + zk_porter_available: false, + // TODO: when forking, we could consider taking the protocol version id from the fork itself. + version: zksync_types::ProtocolVersionId::latest(), + base_system_smart_contracts: base_system_contracts, + gas_limit: BLOCK_GAS_LIMIT, + execution_mode, + default_validation_computational_gas_limit: BLOCK_GAS_LIMIT, + chain_id: self.fork_storage.chain_id, + } + } + + /// Estimates the gas required for a given call request. + /// + /// # Arguments + /// + /// * `req` - A `CallRequest` struct representing the call request to estimate gas for. + /// + /// # Returns + /// + /// A `Result` with a `Fee` representing the estimated gas related data. + pub fn estimate_gas_impl( + &self, + req: zksync_types::transaction_request::CallRequest, + ) -> jsonrpc_core::Result { + let mut request_with_gas_per_pubdata_overridden = req; + + if let Some(ref mut eip712_meta) = request_with_gas_per_pubdata_overridden.eip712_meta { + if eip712_meta.gas_per_pubdata == U256::zero() { + eip712_meta.gas_per_pubdata = MAX_GAS_PER_PUBDATA_BYTE.into(); + } + } + + let is_eip712 = request_with_gas_per_pubdata_overridden + .eip712_meta + .is_some(); + + let mut l2_tx = + match L2Tx::from_request(request_with_gas_per_pubdata_overridden.into(), MAX_TX_SIZE) { + Ok(tx) => tx, + Err(e) => { + let error = Web3Error::SerializationError(e); + return Err(into_jsrpc_error(error)); + } + }; + + let tx: Transaction = l2_tx.clone().into(); + let fair_l2_gas_price = L2_GAS_PRICE; + + // Calculate Adjusted L1 Price + let l1_gas_price = { + let current_l1_gas_price = + ((self.l1_gas_price as f64) * ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR) as u64; + + // In order for execution to pass smoothly, we need to ensure that block's required gasPerPubdata will be + // <= to the one in the transaction itself. + adjust_l1_gas_price_for_tx( + current_l1_gas_price, + L2_GAS_PRICE, + tx.gas_per_pubdata_byte_limit(), + ) + }; + + let (base_fee, gas_per_pubdata_byte) = + derive_base_fee_and_gas_per_pubdata(l1_gas_price, fair_l2_gas_price); + + // Properly format signature + if l2_tx.common_data.signature.is_empty() { + l2_tx.common_data.signature = vec![0u8; 65]; + l2_tx.common_data.signature[64] = 27; + } + + // The user may not include the proper transaction type during the estimation of + // the gas fee. However, it is needed for the bootloader checks to pass properly. + if is_eip712 { + l2_tx.common_data.transaction_type = TransactionType::EIP712Transaction; + } + + l2_tx.common_data.fee.gas_per_pubdata_limit = MAX_GAS_PER_PUBDATA_BYTE.into(); + l2_tx.common_data.fee.max_fee_per_gas = base_fee.into(); + l2_tx.common_data.fee.max_priority_fee_per_gas = base_fee.into(); + + let mut storage_view = StorageView::new(&self.fork_storage); + + // Calculate gas_for_bytecodes_pubdata + let pubdata_for_factory_deps = l2_tx + .execute + .factory_deps + .as_deref() + .unwrap_or_default() + .iter() + .map(|bytecode| { + if storage_view.is_bytecode_known(&hash_bytecode(bytecode)) { + return 0; + } + + let length = if let Ok(compressed) = compress_bytecode(bytecode) { + compressed.len() + } else { + bytecode.len() + }; + length as u32 + ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD + }) + .sum::(); + + if pubdata_for_factory_deps > MAX_PUBDATA_PER_BLOCK { + return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + "exceeds limit for published pubdata".into(), + Default::default(), + ))); + } + + let gas_for_bytecodes_pubdata: u32 = + pubdata_for_factory_deps * (gas_per_pubdata_byte as u32); + + let storage = storage_view.to_rc_ptr(); + + let execution_mode = TxExecutionMode::EstimateFee; + let (mut batch_env, _) = self.create_l1_batch_env(storage.clone()); + batch_env.l1_gas_price = l1_gas_price; + let impersonating = self + .impersonated_accounts + .contains(&l2_tx.common_data.initiator_address); + let system_env = self.create_system_env( + self.system_contracts + .contracts_for_fee_estimate(impersonating) + .clone(), + execution_mode, + ); + + // We are using binary search to find the minimal values of gas_limit under which the transaction succeeds + let mut lower_bound = 0; + let mut upper_bound = MAX_L2_TX_GAS_LIMIT as u32; + let mut attempt_count = 1; + + tracing::trace!("Starting gas estimation loop"); + while lower_bound + ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION < upper_bound { + let mid = (lower_bound + upper_bound) / 2; + tracing::trace!( + "Attempt {} (lower_bound: {}, upper_bound: {}, mid: {})", + attempt_count, + lower_bound, + upper_bound, + mid + ); + let try_gas_limit = gas_for_bytecodes_pubdata + mid; + + let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( + l2_tx.clone(), + gas_per_pubdata_byte, + try_gas_limit, + l1_gas_price, + batch_env.clone(), + system_env.clone(), + &self.fork_storage, + ); + + if estimate_gas_result.result.is_failed() { + tracing::trace!("Attempt {} FAILED", attempt_count); + lower_bound = mid + 1; + } else { + tracing::trace!("Attempt {} SUCCEEDED", attempt_count); + upper_bound = mid; + } + attempt_count += 1; + } + + tracing::trace!("Gas Estimation Values:"); + tracing::trace!(" Final upper_bound: {}", upper_bound); + tracing::trace!(" ESTIMATE_GAS_SCALE_FACTOR: {}", ESTIMATE_GAS_SCALE_FACTOR); + tracing::trace!(" MAX_L2_TX_GAS_LIMIT: {}", MAX_L2_TX_GAS_LIMIT); + let tx_body_gas_limit = cmp::min( + MAX_L2_TX_GAS_LIMIT as u32, + (upper_bound as f32 * ESTIMATE_GAS_SCALE_FACTOR) as u32, + ); + let suggested_gas_limit = tx_body_gas_limit + gas_for_bytecodes_pubdata; + + let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( + l2_tx.clone(), + gas_per_pubdata_byte, + suggested_gas_limit, + l1_gas_price, + batch_env, + system_env, + &self.fork_storage, + ); + + let coefficients = OverheadCoefficients::from_tx_type(EIP_712_TX_TYPE); + let overhead: u32 = derive_overhead( + suggested_gas_limit, + gas_per_pubdata_byte as u32, + tx.encoding_len(), + coefficients, + ); + + match estimate_gas_result.result { + ExecutionResult::Revert { output } => { + tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); + tracing::info!( + "{}", + format!( + "\tEstimated transaction body gas cost: {}", + tx_body_gas_limit + ) + .red() + ); + tracing::info!( + "{}", + format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() + ); + tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); + let message = output.to_string(); + let pretty_message = format!( + "execution reverted{}{}", + if message.is_empty() { "" } else { ": " }, + message + ); + let data = output.encoded_data(); + tracing::info!("{}", pretty_message.on_red()); + Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + pretty_message, + data, + ))) + } + ExecutionResult::Halt { reason } => { + tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); + tracing::info!( + "{}", + format!( + "\tEstimated transaction body gas cost: {}", + tx_body_gas_limit + ) + .red() + ); + tracing::info!( + "{}", + format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() + ); + tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); + let message = reason.to_string(); + let pretty_message = format!( + "execution reverted{}{}", + if message.is_empty() { "" } else { ": " }, + message + ); + + tracing::info!("{}", pretty_message.on_red()); + Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + pretty_message, + vec![], + ))) + } + ExecutionResult::Success { .. } => { + let full_gas_limit = match tx_body_gas_limit + .overflowing_add(gas_for_bytecodes_pubdata + overhead) + { + (value, false) => value, + (_, true) => { + tracing::info!("{}", "Overflow when calculating gas estimation. We've exceeded the block gas limit by summing the following values:".red()); + tracing::info!( + "{}", + format!( + "\tEstimated transaction body gas cost: {}", + tx_body_gas_limit + ) + .red() + ); + tracing::info!( + "{}", + format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() + ); + tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); + return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + "exceeds block gas limit".into(), + Default::default(), + ))); + } + }; + + tracing::trace!("Gas Estimation Results"); + tracing::trace!(" tx_body_gas_limit: {}", tx_body_gas_limit); + tracing::trace!(" gas_for_bytecodes_pubdata: {}", gas_for_bytecodes_pubdata); + tracing::trace!(" overhead: {}", overhead); + tracing::trace!(" full_gas_limit: {}", full_gas_limit); + let fee = Fee { + max_fee_per_gas: base_fee.into(), + max_priority_fee_per_gas: 0u32.into(), + gas_limit: full_gas_limit.into(), + gas_per_pubdata_limit: gas_per_pubdata_byte.into(), + }; + Ok(fee) + } + } + } + + /// Runs fee estimation against a sandbox vm with the given gas_limit. + #[allow(clippy::too_many_arguments)] + fn estimate_gas_step( + mut l2_tx: L2Tx, + gas_per_pubdata_byte: u64, + tx_gas_limit: u32, + l1_gas_price: u64, + mut batch_env: L1BatchEnv, + system_env: SystemEnv, + fork_storage: &ForkStorage, + ) -> VmExecutionResultAndLogs { + let tx: Transaction = l2_tx.clone().into(); + let l1_gas_price = + adjust_l1_gas_price_for_tx(l1_gas_price, L2_GAS_PRICE, tx.gas_per_pubdata_byte_limit()); + + let coefficients = OverheadCoefficients::from_tx_type(EIP_712_TX_TYPE); + // Set gas_limit for transaction + let gas_limit_with_overhead = tx_gas_limit + + derive_overhead( + tx_gas_limit, + gas_per_pubdata_byte as u32, + tx.encoding_len(), + coefficients, + ); + l2_tx.common_data.fee.gas_limit = gas_limit_with_overhead.into(); + + let storage = StorageView::new(fork_storage).to_rc_ptr(); + + // The nonce needs to be updated + let nonce = l2_tx.nonce(); + let nonce_key = get_nonce_key(&l2_tx.initiator_account()); + let full_nonce = storage.borrow_mut().read_value(&nonce_key); + let (_, deployment_nonce) = decompose_full_nonce(h256_to_u256(full_nonce)); + let enforced_full_nonce = nonces_to_full_nonce(U256::from(nonce.0), deployment_nonce); + storage + .borrow_mut() + .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); + + // We need to explicitly put enough balance into the account of the users + let payer = l2_tx.payer(); + let balance_key = storage_key_for_eth_balance(&payer); + let mut current_balance = h256_to_u256(storage.borrow_mut().read_value(&balance_key)); + let added_balance = l2_tx.common_data.fee.gas_limit * l2_tx.common_data.fee.max_fee_per_gas; + current_balance += added_balance; + storage + .borrow_mut() + .set_value(balance_key, u256_to_h256(current_balance)); + + batch_env.l1_gas_price = l1_gas_price; + + let mut vm: Vm<_, HistoryDisabled> = Vm::new(batch_env, system_env, storage.clone()); + + let tx: Transaction = l2_tx.into(); + vm.push_transaction(tx); + + vm.execute(VmExecutionMode::OneTx) + } + + /// Sets the `impersonated_account` field of the node. + /// This field is used to override the `tx.initiator_account` field of the transaction in the `run_l2_tx` method. + pub fn set_impersonated_account(&mut self, address: Address) -> bool { + self.impersonated_accounts.insert(address) + } + + /// Clears the `impersonated_account` field of the node. + pub fn stop_impersonating_account(&mut self, address: Address) -> bool { + self.impersonated_accounts.remove(&address) + } + + /// Archives the current state for later queries. + pub fn archive_state(&mut self) -> Result<(), String> { + if self.previous_states.len() > MAX_PREVIOUS_STATES as usize { + if let Some(entry) = self.previous_states.shift_remove_index(0) { + tracing::debug!("removing archived state for previous block {:#x}", entry.0); + } + } + tracing::debug!( + "archiving state for {:#x} #{}", + self.current_miniblock_hash, + self.current_miniblock + ); + self.previous_states.insert( + self.current_miniblock_hash, + self.fork_storage + .inner + .read() + .map_err(|err| err.to_string())? + .raw_storage + .state + .clone(), + ); + + Ok(()) + } + + /// Creates a [Snapshot] of the current state of the node. + pub fn snapshot(&self) -> Result { + let storage = self + .fork_storage + .inner + .read() + .map_err(|err| format!("failed acquiring read lock on storage: {:?}", err))?; + + Ok(Snapshot { + current_timestamp: self.current_timestamp, + current_batch: self.current_batch, + current_miniblock: self.current_miniblock, + current_miniblock_hash: self.current_miniblock_hash, + l1_gas_price: self.l1_gas_price, + tx_results: self.tx_results.clone(), + blocks: self.blocks.clone(), + block_hashes: self.block_hashes.clone(), + filters: self.filters.clone(), + impersonated_accounts: self.impersonated_accounts.clone(), + rich_accounts: self.rich_accounts.clone(), + previous_states: self.previous_states.clone(), + raw_storage: storage.raw_storage.clone(), + value_read_cache: storage.value_read_cache.clone(), + factory_dep_cache: storage.factory_dep_cache.clone(), + }) + } + + /// Restores a previously created [Snapshot] of the node. + pub fn restore_snapshot(&mut self, snapshot: Snapshot) -> Result<(), String> { + let mut storage = self + .fork_storage + .inner + .write() + .map_err(|err| format!("failed acquiring write lock on storage: {:?}", err))?; + + self.current_timestamp = snapshot.current_timestamp; + self.current_batch = snapshot.current_batch; + self.current_miniblock = snapshot.current_miniblock; + self.current_miniblock_hash = snapshot.current_miniblock_hash; + self.l1_gas_price = snapshot.l1_gas_price; + self.tx_results = snapshot.tx_results; + self.blocks = snapshot.blocks; + self.block_hashes = snapshot.block_hashes; + self.filters = snapshot.filters; + self.impersonated_accounts = snapshot.impersonated_accounts; + self.rich_accounts = snapshot.rich_accounts; + self.previous_states = snapshot.previous_states; + storage.raw_storage = snapshot.raw_storage; + storage.value_read_cache = snapshot.value_read_cache; + storage.factory_dep_cache = snapshot.factory_dep_cache; + + Ok(()) + } +} + +/// Creates a restorable snapshot for the [InMemoryNodeInner]. The snapshot contains all the necessary +/// data required to restore the [InMemoryNodeInner] state to a previous point in time. +#[derive(Debug, Clone)] +pub struct Snapshot { + pub(crate) current_timestamp: u64, + pub(crate) current_batch: u32, + pub(crate) current_miniblock: u64, + pub(crate) current_miniblock_hash: H256, + pub(crate) l1_gas_price: u64, + pub(crate) tx_results: HashMap, + pub(crate) blocks: HashMap>, + pub(crate) block_hashes: HashMap, + pub(crate) filters: EthFilters, + pub(crate) impersonated_accounts: HashSet
, + pub(crate) rich_accounts: HashSet, + pub(crate) previous_states: IndexMap>, + pub(crate) raw_storage: InMemoryStorage, + pub(crate) value_read_cache: HashMap, + pub(crate) factory_dep_cache: HashMap>>, +} + +/// Defines the configuration parameters for the [InMemoryNode]. +#[derive(Default, Debug, Clone)] +pub struct InMemoryNodeConfig { + pub show_calls: ShowCalls, + pub show_storage_logs: ShowStorageLogs, + pub show_vm_details: ShowVMDetails, + pub show_gas_details: ShowGasDetails, + pub resolve_hashes: bool, + pub system_contracts_options: system_contracts::Options, +} + +/// In-memory node, that can be used for local & unit testing. +/// It also supports the option of forking testnet/mainnet. +/// All contents are removed when object is destroyed. +#[derive(Clone)] +pub struct InMemoryNode { + /// A thread safe reference to the [InMemoryNodeInner]. + inner: Arc>>, + /// List of snapshots of the [InMemoryNodeInner]. This is bounded at runtime by [MAX_SNAPSHOTS]. + pub(crate) snapshots: Arc>>, +} + +fn contract_address_from_tx_result(execution_result: &VmExecutionResultAndLogs) -> Option { + for query in execution_result.logs.storage_logs.iter().rev() { + if query.log_type == StorageLogQueryType::InitialWrite + && query.log_query.address == ACCOUNT_CODE_STORAGE_ADDRESS + { + return Some(h256_to_account_address(&u256_to_h256(query.log_query.key))); + } + } + None +} + +impl Default for InMemoryNode { + fn default() -> Self { + InMemoryNode::new(None, None, InMemoryNodeConfig::default()) + } +} + +impl InMemoryNode { + pub fn new( + fork: Option>, + observability: Option, + config: InMemoryNodeConfig, + ) -> Self { + let inner = if let Some(f) = &fork { + let mut block_hashes = HashMap::::new(); + block_hashes.insert(f.l2_block.number.as_u64(), f.l2_block.hash); + let mut blocks = HashMap::>::new(); + blocks.insert(f.l2_block.hash, f.l2_block.clone()); + + InMemoryNodeInner { + current_timestamp: f.block_timestamp, + current_batch: f.l1_block.0, + current_miniblock: f.l2_miniblock, + current_miniblock_hash: f.l2_miniblock_hash, + l1_gas_price: f.l1_gas_price, + tx_results: Default::default(), + blocks, + block_hashes, + filters: Default::default(), + fork_storage: ForkStorage::new(fork, &config.system_contracts_options), + show_calls: config.show_calls, + show_storage_logs: config.show_storage_logs, + show_vm_details: config.show_vm_details, + show_gas_details: config.show_gas_details, + resolve_hashes: config.resolve_hashes, + console_log_handler: ConsoleLogHandler::default(), + system_contracts: SystemContracts::from_options(&config.system_contracts_options), + impersonated_accounts: Default::default(), + rich_accounts: HashSet::new(), + previous_states: Default::default(), + observability, + } + } else { + let mut block_hashes = HashMap::::new(); + let block_hash = compute_hash(0, H256::zero()); + block_hashes.insert(0, block_hash); + let mut blocks = HashMap::>::new(); + blocks.insert( + block_hash, + create_empty_block(0, NON_FORK_FIRST_BLOCK_TIMESTAMP, 0, None), + ); + + InMemoryNodeInner { + current_timestamp: NON_FORK_FIRST_BLOCK_TIMESTAMP, + current_batch: 0, + current_miniblock: 0, + current_miniblock_hash: block_hash, + l1_gas_price: L1_GAS_PRICE, + tx_results: Default::default(), + blocks, + block_hashes, + filters: Default::default(), + fork_storage: ForkStorage::new(fork, &config.system_contracts_options), + show_calls: config.show_calls, + show_storage_logs: config.show_storage_logs, + show_vm_details: config.show_vm_details, + show_gas_details: config.show_gas_details, + resolve_hashes: config.resolve_hashes, + console_log_handler: ConsoleLogHandler::default(), + system_contracts: SystemContracts::from_options(&config.system_contracts_options), + impersonated_accounts: Default::default(), + rich_accounts: HashSet::new(), + previous_states: Default::default(), + observability, + } + }; + + InMemoryNode { + inner: Arc::new(RwLock::new(inner)), + snapshots: Default::default(), + } + } + + pub fn get_inner(&self) -> Arc>> { + self.inner.clone() + } + + /// Applies multiple transactions - but still one per L1 batch. + pub fn apply_txs(&self, txs: Vec) -> Result<(), String> { + tracing::info!("Running {:?} transactions (one per batch)", txs.len()); + + for tx in txs { + self.run_l2_tx(tx, TxExecutionMode::VerifyExecute)?; + } + + Ok(()) + } + + /// Adds a lot of tokens to a given account. + pub fn set_rich_account(&self, address: H160) { + let key = storage_key_for_eth_balance(&address); + + let mut inner = match self.inner.write() { + Ok(guard) => guard, + Err(e) => { + tracing::info!("Failed to acquire write lock: {}", e); + return; + } + }; + + let keys = { + let mut storage_view = StorageView::new(&inner.fork_storage); + storage_view.set_value(key, u256_to_h256(U256::from(10u128.pow(30)))); + storage_view.modified_storage_keys().clone() + }; + + for (key, value) in keys.iter() { + inner.fork_storage.set_value(*key, *value); + } + inner.rich_accounts.insert(address); + } + + /// Runs L2 'eth call' method - that doesn't commit to a block. + pub fn run_l2_call(&self, mut l2_tx: L2Tx) -> Result { + let execution_mode = TxExecutionMode::EthCall; + + let inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + + let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); + + let bootloader_code = inner.system_contracts.contracts_for_l2_call(); + + // init vm + + let (batch_env, _) = inner.create_l1_batch_env(storage.clone()); + let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); + + let mut vm: Vm<_, HistoryDisabled> = Vm::new(batch_env, system_env, storage.clone()); + + // We must inject *some* signature (otherwise bootloader code fails to generate hash). + if l2_tx.common_data.signature.is_empty() { + l2_tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); + } + + let tx: Transaction = l2_tx.into(); + vm.push_transaction(tx); + + let call_tracer_result = Arc::new(OnceCell::default()); + + let custom_tracer = CallTracer::new(call_tracer_result.clone()).into_tracer_pointer(); + + let tx_result = vm.inspect(custom_tracer.into(), VmExecutionMode::OneTx); + + let call_traces = Arc::try_unwrap(call_tracer_result) + .unwrap() + .take() + .unwrap_or_default(); + + match &tx_result.result { + ExecutionResult::Success { output } => { + tracing::info!("Call: {}", "SUCCESS".green()); + let output_bytes = zksync_basic_types::Bytes::from(output.clone()); + tracing::info!("Output: {}", serde_json::to_string(&output_bytes).unwrap()); + } + ExecutionResult::Revert { output } => { + tracing::info!("Call: {}: {}", "FAILED".red(), output); + } + ExecutionResult::Halt { reason } => { + tracing::info!("Call: {} {}", "HALTED".red(), reason) + } + }; + + tracing::info!("=== Console Logs: "); + for call in &call_traces { + inner.console_log_handler.handle_call_recursive(call); + } + + tracing::info!("=== Call traces:"); + for call in &call_traces { + formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); + } + + Ok(tx_result.result) + } + + fn display_detailed_gas_info( + &self, + bootloader_debug_result: Option<&eyre::Result>, + spent_on_pubdata: u32, + ) -> eyre::Result<(), String> { + if let Some(bootloader_result) = bootloader_debug_result { + let bootloader_debug = bootloader_result.clone()?; + + tracing::info!("┌─────────────────────────┐"); + tracing::info!("│ GAS DETAILS │"); + tracing::info!("└─────────────────────────┘"); + + // Total amount of gas (should match tx.gas_limit). + let total_gas_limit = bootloader_debug + .total_gas_limit_from_user + .saturating_sub(bootloader_debug.reserved_gas); + + let intrinsic_gas = total_gas_limit - bootloader_debug.gas_limit_after_intrinsic; + let gas_for_validation = + bootloader_debug.gas_limit_after_intrinsic - bootloader_debug.gas_after_validation; + + let gas_spent_on_compute = bootloader_debug.gas_spent_on_execution + - bootloader_debug.gas_spent_on_bytecode_preparation; + + let gas_used = intrinsic_gas + + gas_for_validation + + bootloader_debug.gas_spent_on_bytecode_preparation + + gas_spent_on_compute; + + tracing::info!( + "Gas - Limit: {} | Used: {} | Refunded: {}", + to_human_size(total_gas_limit), + to_human_size(gas_used), + to_human_size(bootloader_debug.refund_by_operator) + ); + + if bootloader_debug.total_gas_limit_from_user != total_gas_limit { + tracing::info!( + "{}", + format!( + " WARNING: user actually provided more gas {}, but system had a lower max limit.", + to_human_size(bootloader_debug.total_gas_limit_from_user) + ) + .yellow() + ); + } + if bootloader_debug.refund_computed != bootloader_debug.refund_by_operator { + tracing::info!( + "{}", + format!( + " WARNING: Refund by VM: {}, but operator refunded more: {}", + to_human_size(bootloader_debug.refund_computed), + to_human_size(bootloader_debug.refund_by_operator) + ) + .yellow() + ); + } + + if bootloader_debug.refund_computed + gas_used != total_gas_limit { + tracing::info!( + "{}", + format!( + " WARNING: Gas totals don't match. {} != {} , delta: {}", + to_human_size(bootloader_debug.refund_computed + gas_used), + to_human_size(total_gas_limit), + to_human_size( + total_gas_limit.abs_diff(bootloader_debug.refund_computed + gas_used) + ) + ) + .yellow() + ); + } + + let bytes_published = spent_on_pubdata / bootloader_debug.gas_per_pubdata.as_u32(); + + tracing::info!( + "During execution published {} bytes to L1, @{} each - in total {} gas", + to_human_size(bytes_published.into()), + to_human_size(bootloader_debug.gas_per_pubdata), + to_human_size(spent_on_pubdata.into()) + ); + + tracing::info!("Out of {} gas used, we spent:", to_human_size(gas_used)); + tracing::info!( + " {:>15} gas ({:>2}%) for transaction setup", + to_human_size(intrinsic_gas), + to_human_size(intrinsic_gas * 100 / gas_used) + ); + tracing::info!( + " {:>15} gas ({:>2}%) for bytecode preparation (decompression etc)", + to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation), + to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation * 100 / gas_used) + ); + tracing::info!( + " {:>15} gas ({:>2}%) for account validation", + to_human_size(gas_for_validation), + to_human_size(gas_for_validation * 100 / gas_used) + ); + tracing::info!( + " {:>15} gas ({:>2}%) for computations (opcodes)", + to_human_size(gas_spent_on_compute), + to_human_size(gas_spent_on_compute * 100 / gas_used) + ); + + tracing::info!(""); + tracing::info!(""); + tracing::info!( + "{}", + "=== Transaction setup cost breakdown ===".to_owned().bold(), + ); + + tracing::info!("Total cost: {}", to_human_size(intrinsic_gas).bold()); + tracing::info!( + " {:>15} gas ({:>2}%) fixed cost", + to_human_size(bootloader_debug.intrinsic_overhead), + to_human_size(bootloader_debug.intrinsic_overhead * 100 / intrinsic_gas) + ); + tracing::info!( + " {:>15} gas ({:>2}%) operator cost", + to_human_size(bootloader_debug.operator_overhead), + to_human_size(bootloader_debug.operator_overhead * 100 / intrinsic_gas) + ); + + tracing::info!(""); + tracing::info!( + " FYI: operator could have charged up to: {}, so you got {}% discount", + to_human_size(bootloader_debug.required_overhead), + to_human_size( + (bootloader_debug.required_overhead - bootloader_debug.operator_overhead) * 100 + / bootloader_debug.required_overhead + ) + ); + + let publish_block_l1_bytes = BLOCK_OVERHEAD_PUBDATA; + tracing::info!( + "Publishing full block costs the operator up to: {}, where {} is due to {} bytes published to L1", + to_human_size(bootloader_debug.total_overhead_for_block), + to_human_size(bootloader_debug.gas_per_pubdata * publish_block_l1_bytes), + to_human_size(publish_block_l1_bytes.into()) + ); + tracing::info!("Your transaction has contributed to filling up the block in the following way (we take the max contribution as the cost):"); + tracing::info!( + " Circuits overhead:{:>15} ({}% of the full block: {})", + to_human_size(bootloader_debug.overhead_for_circuits), + to_human_size( + bootloader_debug.overhead_for_circuits * 100 + / bootloader_debug.total_overhead_for_block + ), + to_human_size(bootloader_debug.total_overhead_for_block) + ); + tracing::info!( + " Length overhead: {:>15}", + to_human_size(bootloader_debug.overhead_for_length) + ); + tracing::info!( + " Slot overhead: {:>15}", + to_human_size(bootloader_debug.overhead_for_slot) + ); + Ok(()) + } else { + Err("Booloader tracer didn't finish.".to_owned()) + } + } + + // Validates L2 transaction + fn validate_tx(&self, tx: &L2Tx) -> Result<(), String> { + let max_gas = U256::from(u32::MAX); + if tx.common_data.fee.gas_limit > max_gas + || tx.common_data.fee.gas_per_pubdata_limit > max_gas + { + return Err("exceeds block gas limit".into()); + } + + if tx.common_data.fee.max_fee_per_gas < L2_GAS_PRICE.into() { + tracing::info!( + "Submitted Tx is Unexecutable {:?} because of MaxFeePerGasTooLow {}", + tx.hash(), + tx.common_data.fee.max_fee_per_gas + ); + return Err("block base fee higher than max fee per gas".into()); + } + + if tx.common_data.fee.max_fee_per_gas < tx.common_data.fee.max_priority_fee_per_gas { + tracing::info!( + "Submitted Tx is Unexecutable {:?} because of MaxPriorityFeeGreaterThanMaxFee {}", + tx.hash(), + tx.common_data.fee.max_fee_per_gas + ); + return Err("max priority fee per gas higher than max fee per gas".into()); + } + Ok(()) + } + + /// Executes the given L2 transaction and returns all the VM logs. + /// + /// **NOTE** + /// + /// This function must only rely on data populated initially via [ForkDetails]: + /// * [InMemoryNodeInner::current_timestamp] + /// * [InMemoryNodeInner::current_batch] + /// * [InMemoryNodeInner::current_miniblock] + /// * [InMemoryNodeInner::current_miniblock_hash] + /// * [InMemoryNodeInner::l1_gas_price] + /// + /// And must _NEVER_ rely on data updated in [InMemoryNodeInner] during previous runs: + /// (if used, they must never panic and/or have meaningful defaults) + /// * [InMemoryNodeInner::block_hashes] + /// * [InMemoryNodeInner::blocks] + /// * [InMemoryNodeInner::tx_results] + /// + /// This is because external users of the library may call this function to perform an isolated + /// VM operation with an external storage and get the results back. + /// So any data populated in [Self::run_l2_tx] will not be available for the next invocation. + pub fn run_l2_tx_raw( + &self, + l2_tx: L2Tx, + execution_mode: TxExecutionMode, + mut tracers: Vec< + TracerPointer>, multivm::vm_latest::HistoryDisabled>, + >, + ) -> Result { + let inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + + let storage = StorageView::new(inner.fork_storage.clone()).to_rc_ptr(); + + let (batch_env, block_ctx) = inner.create_l1_batch_env(storage.clone()); + + let bootloader_code = { + if inner + .impersonated_accounts + .contains(&l2_tx.common_data.initiator_address) + { + tracing::info!( + "🕵️ Executing tx from impersonated account {:?}", + l2_tx.common_data.initiator_address + ); + inner.system_contracts.contracts(execution_mode, true) + } else { + inner.system_contracts.contracts(execution_mode, false) + } + }; + let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); + + let mut vm: Vm<_, HistoryDisabled> = + Vm::new(batch_env.clone(), system_env, storage.clone()); + + let tx: Transaction = l2_tx.clone().into(); + + vm.push_transaction(tx.clone()); + + let call_tracer_result = Arc::new(OnceCell::default()); + let bootloader_debug_result = Arc::new(OnceCell::default()); + + tracers.push(CallTracer::new(call_tracer_result.clone()).into_tracer_pointer()); + tracers.push( + BootloaderDebugTracer { + result: bootloader_debug_result.clone(), + } + .into_tracer_pointer(), + ); + + let tx_result = vm.inspect(tracers.into(), VmExecutionMode::OneTx); + + let call_traces = call_tracer_result.get().unwrap(); + + let spent_on_pubdata = + tx_result.statistics.gas_used - tx_result.statistics.computational_gas_used; + + tracing::info!("┌─────────────────────────┐"); + tracing::info!("│ TRANSACTION SUMMARY │"); + tracing::info!("└─────────────────────────┘"); + + match &tx_result.result { + ExecutionResult::Success { .. } => tracing::info!("Transaction: {}", "SUCCESS".green()), + ExecutionResult::Revert { .. } => tracing::info!("Transaction: {}", "FAILED".red()), + ExecutionResult::Halt { .. } => tracing::info!("Transaction: {}", "HALTED".red()), + } + + tracing::info!("Initiator: {:?}", tx.initiator_account()); + tracing::info!("Payer: {:?}", tx.payer()); + tracing::info!( + "Gas - Limit: {} | Used: {} | Refunded: {}", + to_human_size(tx.gas_limit()), + to_human_size(tx.gas_limit() - tx_result.refunds.gas_refunded), + to_human_size(tx_result.refunds.gas_refunded.into()) + ); + + match inner.show_gas_details { + ShowGasDetails::None => tracing::info!( + "Use --show-gas-details flag or call config_setShowGasDetails to display more info" + ), + ShowGasDetails::All => { + if self + .display_detailed_gas_info(bootloader_debug_result.get(), spent_on_pubdata) + .is_err() + { + tracing::info!( + "{}", + "!!! FAILED TO GET DETAILED GAS INFO !!!".to_owned().red() + ); + } + } + } + + if inner.show_storage_logs != ShowStorageLogs::None { + tracing::info!(""); + tracing::info!("┌──────────────────┐"); + tracing::info!("│ STORAGE LOGS │"); + tracing::info!("└──────────────────┘"); + } + + for log_query in &tx_result.logs.storage_logs { + match inner.show_storage_logs { + ShowStorageLogs::Write => { + if matches!( + log_query.log_type, + StorageLogQueryType::RepeatedWrite | StorageLogQueryType::InitialWrite + ) { + formatter::print_logs(log_query); + } + } + ShowStorageLogs::Read => { + if log_query.log_type == StorageLogQueryType::Read { + formatter::print_logs(log_query); + } + } + ShowStorageLogs::All => { + formatter::print_logs(log_query); + } + _ => {} + } + } + + if inner.show_vm_details != ShowVMDetails::None { + formatter::print_vm_details(&tx_result); + } + + tracing::info!(""); + tracing::info!("==== Console logs: "); + for call in call_traces { + inner.console_log_handler.handle_call_recursive(call); + } + tracing::info!(""); + let call_traces_count = if !call_traces.is_empty() { + // All calls/sub-calls are stored within the first call trace + call_traces[0].calls.len() + } else { + 0 + }; + tracing::info!( + "==== {} Use --show-calls flag or call config_setShowCalls to display more info.", + format!("{:?} call traces. ", call_traces_count).bold() + ); + + if inner.show_calls != ShowCalls::None { + for call in call_traces { + formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); + } + } + tracing::info!(""); + tracing::info!( + "==== {}", + format!("{} events", tx_result.logs.events.len()).bold() + ); + for event in &tx_result.logs.events { + formatter::print_event(event, inner.resolve_hashes); + } + + // The computed block hash here will be different than that in production. + let hash = compute_hash(block_ctx.miniblock, l2_tx.hash()); + + let mut transaction = zksync_types::api::Transaction::from(l2_tx); + transaction.block_hash = Some(inner.current_miniblock_hash); + transaction.block_number = Some(U64::from(inner.current_miniblock)); + + let parent_block_hash = inner + .block_hashes + .get(&(block_ctx.miniblock - 1)) + .cloned() + .unwrap_or_default(); + + let block = Block { + hash, + parent_hash: parent_block_hash, + number: U64::from(block_ctx.miniblock), + timestamp: U256::from(batch_env.timestamp), + l1_batch_number: Some(U64::from(batch_env.number.0)), + transactions: vec![TransactionVariant::Full(transaction)], + gas_used: U256::from(tx_result.statistics.gas_used), + gas_limit: U256::from(BLOCK_GAS_LIMIT), + ..Default::default() + }; + + tracing::info!(""); + + let bytecodes = vm + .get_last_tx_compressed_bytecodes() + .iter() + .map(|b| bytecode_to_factory_dep(b.original.clone())) + .collect(); + + vm.execute(VmExecutionMode::Bootloader); + + let modified_keys = storage.borrow().modified_storage_keys().clone(); + Ok(( + modified_keys, + tx_result, + call_traces.clone(), + block, + bytecodes, + block_ctx, + )) + } + + /// Runs L2 transaction and commits it to a new block. + pub fn run_l2_tx(&self, l2_tx: L2Tx, execution_mode: TxExecutionMode) -> Result<(), String> { + let tx_hash = l2_tx.hash(); + + tracing::info!(""); + tracing::info!("Validating {}", format!("{:?}", tx_hash).bold()); + + match self.validate_tx(&l2_tx) { + Ok(_) => (), + Err(e) => { + return Err(e); + } + }; + + tracing::info!("Executing {}", format!("{:?}", tx_hash).bold()); + + { + let mut inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + inner.filters.notify_new_pending_transaction(tx_hash); + } + + let (keys, result, call_traces, block, bytecodes, block_ctx) = + self.run_l2_tx_raw(l2_tx.clone(), execution_mode, vec![])?; + + if let ExecutionResult::Halt { reason } = result.result { + // Halt means that something went really bad with the transaction execution (in most cases invalid signature, + // but it could also be bootloader panic etc). + // In such case, we should not persist the VM data, and we should pretend that transaction never existed. + return Err(format!("Transaction HALT: {}", reason)); + } + // Write all the mutated keys (storage slots). + let mut inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + for (key, value) in keys.iter() { + inner.fork_storage.set_value(*key, *value); + } + + // Write all the factory deps. + for (hash, code) in bytecodes.iter() { + inner.fork_storage.store_factory_dep( + u256_to_h256(*hash), + code.iter() + .flat_map(|entry| { + let mut bytes = vec![0u8; 32]; + entry.to_big_endian(&mut bytes); + bytes.to_vec() + }) + .collect(), + ) + } + + for (log_idx, event) in result.logs.events.iter().enumerate() { + inner.filters.notify_new_log( + &Log { + address: event.address, + topics: event.indexed_topics.clone(), + data: Bytes(event.value.clone()), + block_hash: Some(block.hash), + block_number: Some(block.number), + l1_batch_number: block.l1_batch_number, + transaction_hash: Some(tx_hash), + transaction_index: Some(U64::zero()), + log_index: Some(U256::from(log_idx)), + transaction_log_index: Some(U256::from(log_idx)), + log_type: None, + removed: Some(false), + }, + block.number, + ); + } + let tx_receipt = TransactionReceipt { + transaction_hash: tx_hash, + transaction_index: U64::from(0), + block_hash: Some(block.hash), + block_number: Some(block.number), + l1_batch_tx_index: None, + l1_batch_number: block.l1_batch_number, + from: l2_tx.initiator_account(), + to: Some(l2_tx.recipient_account()), + root: Some(H256::zero()), + cumulative_gas_used: Default::default(), + gas_used: Some(l2_tx.common_data.fee.gas_limit - result.refunds.gas_refunded), + contract_address: contract_address_from_tx_result(&result), + logs: result + .logs + .events + .iter() + .enumerate() + .map(|(log_idx, log)| Log { + address: log.address, + topics: log.indexed_topics.clone(), + data: Bytes(log.value.clone()), + block_hash: Some(block.hash), + block_number: Some(block.number), + l1_batch_number: block.l1_batch_number, + transaction_hash: Some(tx_hash), + transaction_index: Some(U64::zero()), + log_index: Some(U256::from(log_idx)), + transaction_log_index: Some(U256::from(log_idx)), + log_type: None, + removed: Some(false), + }) + .collect(), + l2_to_l1_logs: vec![], + status: Some(if result.result.is_failed() { + U64::from(0) + } else { + U64::from(1) + }), + effective_gas_price: Some(L2_GAS_PRICE.into()), + ..Default::default() + }; + let debug = create_debug_output(&l2_tx, &result, call_traces).expect("create debug output"); // OK to unwrap here as Halt is handled above + inner.tx_results.insert( + tx_hash, + TransactionResult { + info: TxExecutionInfo { + tx: l2_tx, + batch_number: block.l1_batch_number.unwrap_or_default().as_u32(), + miniblock_number: block.number.as_u64(), + result, + }, + receipt: tx_receipt, + debug, + }, + ); + + // With the introduction of 'l2 blocks' (and virtual blocks), + // we are adding one l2 block at the end of each batch (to handle things like remaining events etc). + // You can look at insert_fictive_l2_block function in VM to see how this fake block is inserted. + let block_ctx = block_ctx.new_block(); + let parent_block_hash = block.hash; + let empty_block_at_end_of_batch = create_empty_block( + block_ctx.miniblock, + block_ctx.timestamp, + block_ctx.batch, + Some(parent_block_hash), + ); + + inner.current_batch = inner.current_batch.saturating_add(1); + + for block in vec![block, empty_block_at_end_of_batch] { + // archive current state before we produce new batch/blocks + if let Err(err) = inner.archive_state() { + tracing::error!( + "failed archiving state for block {}: {}", + inner.current_miniblock, + err + ); + } + + inner.current_miniblock = inner.current_miniblock.saturating_add(1); + inner.current_timestamp = inner.current_timestamp.saturating_add(1); + + let actual_l1_batch_number = block + .l1_batch_number + .expect("block must have a l1_batch_number"); + if actual_l1_batch_number.as_u32() != inner.current_batch { + panic!( + "expected next block to have batch_number {}, got {}", + inner.current_batch, + actual_l1_batch_number.as_u32() + ); + } + + if block.number.as_u64() != inner.current_miniblock { + panic!( + "expected next block to have miniblock {}, got {}", + inner.current_miniblock, + block.number.as_u64() + ); + } + + if block.timestamp.as_u64() != inner.current_timestamp { + panic!( + "expected next block to have timestamp {}, got {}", + inner.current_timestamp, + block.timestamp.as_u64() + ); + } + + let block_hash = block.hash; + inner.current_miniblock_hash = block_hash; + inner.block_hashes.insert(block.number.as_u64(), block.hash); + inner.blocks.insert(block.hash, block); + inner.filters.notify_new_block(block_hash); + } + + Ok(()) + } +} + +/// Keeps track of a block's batch number, miniblock number and timestamp. +/// Useful for keeping track of the current context when creating multiple blocks. +pub struct BlockContext { + pub batch: u32, + pub miniblock: u64, + pub timestamp: u64, +} + +impl BlockContext { + /// Create the current instance that represents the latest block. + pub fn from_current(batch: u32, miniblock: u64, timestamp: u64) -> Self { + Self { + batch, + miniblock, + timestamp, + } + } + + /// Create the next batch instance that has all parameters incremented by `1`. + pub fn new_batch(&self) -> Self { + Self { + batch: self.batch.saturating_add(1), + miniblock: self.miniblock.saturating_add(1), + timestamp: self.timestamp.saturating_add(1), + } + } + + /// Create the next batch instance that uses the same batch number, and has all other parameters incremented by `1`. + pub fn new_block(&self) -> BlockContext { + Self { + batch: self.batch, + miniblock: self.miniblock.saturating_add(1), + timestamp: self.timestamp.saturating_add(1), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{http_fork_source::HttpForkSource, node::InMemoryNode, testing}; + + #[tokio::test] + async fn test_run_l2_tx_validates_tx_gas_limit_too_high() { + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new() + .set_gas_limit(U256::from(u32::MAX) + 1) + .build(); + node.set_rich_account(tx.common_data.initiator_address); + + let result = node.run_l2_tx(tx, TxExecutionMode::VerifyExecute); + + assert_eq!(result.err(), Some("exceeds block gas limit".into())); + } + + #[tokio::test] + async fn test_run_l2_tx_validates_tx_max_fee_per_gas_too_low() { + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new() + .set_max_fee_per_gas(U256::from(250_000_000 - 1)) + .build(); + node.set_rich_account(tx.common_data.initiator_address); + + let result = node.run_l2_tx(tx, TxExecutionMode::VerifyExecute); + + assert_eq!( + result.err(), + Some("block base fee higher than max fee per gas".into()) + ); + } + + #[tokio::test] + async fn test_run_l2_tx_validates_tx_max_priority_fee_per_gas_higher_than_max_fee_per_gas() { + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new() + .set_max_priority_fee_per_gas(U256::from(250_000_000 + 1)) + .build(); + node.set_rich_account(tx.common_data.initiator_address); + + let result = node.run_l2_tx(tx, TxExecutionMode::VerifyExecute); + + assert_eq!( + result.err(), + Some("max priority fee per gas higher than max fee per gas".into()) + ); + } + + #[tokio::test] + async fn test_create_empty_block_creates_genesis_block_with_hash_and_zero_parent_hash() { + let first_block = create_empty_block::(0, 1000, 1, None); + + assert_eq!(first_block.hash, compute_hash(0, H256::zero())); + assert_eq!(first_block.parent_hash, H256::zero()); + } + + #[tokio::test] + async fn test_create_empty_block_creates_block_with_parent_hash_link_to_prev_block() { + let first_block = create_empty_block::(0, 1000, 1, None); + let second_block = create_empty_block::(1, 1000, 1, None); + + assert_eq!(second_block.parent_hash, first_block.hash); + } + + #[tokio::test] + async fn test_create_empty_block_creates_block_with_parent_hash_link_to_provided_parent_hash() { + let first_block = create_empty_block::( + 0, + 1000, + 1, + Some(compute_hash(123, H256::zero())), + ); + let second_block = + create_empty_block::(1, 1000, 1, Some(first_block.hash)); + + assert_eq!(first_block.parent_hash, compute_hash(123, H256::zero())); + assert_eq!(second_block.parent_hash, first_block.hash); + } + + #[tokio::test] + async fn test_run_l2_tx_raw_does_not_panic_on_external_storage_call() { + // Perform a transaction to get storage to an intermediate state + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new().build(); + node.set_rich_account(tx.common_data.initiator_address); + node.run_l2_tx(tx, TxExecutionMode::VerifyExecute).unwrap(); + let external_storage = node.inner.read().unwrap().fork_storage.clone(); + + // Execute next transaction using a fresh in-memory node and the external fork storage + let mock_db = testing::ExternalStorage { + raw_storage: external_storage.inner.read().unwrap().raw_storage.clone(), + }; + let node = InMemoryNode::new( + Some(ForkDetails { + fork_source: &mock_db, + l1_block: L1BatchNumber(1), + l2_block: Block::default(), + l2_miniblock: 2, + l2_miniblock_hash: Default::default(), + block_timestamp: 1002, + overwrite_chain_id: None, + l1_gas_price: 1000, + }), + None, + Default::default(), + ); + + node.run_l2_tx_raw( + testing::TransactionBuilder::new().build(), + TxExecutionMode::VerifyExecute, + vec![], + ) + .expect("transaction must pass with external storage"); + } +} diff --git a/src/node/in_memory_ext.rs b/src/node/in_memory_ext.rs new file mode 100644 index 00000000..90e5395b --- /dev/null +++ b/src/node/in_memory_ext.rs @@ -0,0 +1,901 @@ +use anyhow::anyhow; +use zksync_basic_types::{Address, U256, U64}; +use zksync_state::ReadStorage; +use zksync_types::{ + get_code_key, get_nonce_key, + utils::{decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance}, +}; +use zksync_utils::{h256_to_u256, u256_to_h256}; + +use crate::{ + fork::ForkSource, + node::InMemoryNode, + utils::{self, bytecode_to_factory_dep}, +}; + +type Result = anyhow::Result; + +/// The maximum number of [Snapshot]s to store. Each snapshot represents the node state +/// and can be used to revert the node to an earlier point in time. +const MAX_SNAPSHOTS: u8 = 100; + +impl InMemoryNode { + /// Increase the current timestamp for the node + /// + /// # Parameters + /// - `time_delta`: The number of seconds to increase time by + /// + /// # Returns + /// The applied time delta to `current_timestamp` value for the InMemoryNodeInner. + pub fn increase_time(&self, time_delta_seconds: u64) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + if time_delta_seconds == 0 { + return time_delta_seconds; + } + + let time_delta = time_delta_seconds.saturating_mul(1000); + writer.current_timestamp = writer.current_timestamp.saturating_add(time_delta); + time_delta_seconds + }) + } + + /// Set the current timestamp for the node. The timestamp must be in future. + /// + /// # Parameters + /// - `timestamp`: The timestamp to set the time to + /// + /// # Returns + /// The new timestamp value for the InMemoryNodeInner. + pub fn set_next_block_timestamp(&self, timestamp: u64) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + if timestamp < writer.current_timestamp { + Err(anyhow!( + "timestamp ({}) must be greater than current timestamp ({})", + timestamp, + writer.current_timestamp + )) + } else { + writer.current_timestamp = timestamp; + Ok(timestamp) + } + }) + } + + /// Set the current timestamp for the node. + /// Warning: This will allow you to move backwards in time, which may cause new blocks to appear to be + /// mined before old blocks. This will result in an invalid state. + /// + /// # Parameters + /// - `time`: The timestamp to set the time to + /// + /// # Returns + /// The difference between the `current_timestamp` and the new timestamp for the InMemoryNodeInner. + pub fn set_time(&self, time: u64) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + let time_diff = (time as i128).saturating_sub(writer.current_timestamp as i128); + writer.current_timestamp = time; + time_diff + }) + } + + /// Force a single block to be mined. + /// + /// Will mine an empty block (containing zero transactions) + /// + /// # Returns + /// The string "0x0". + pub fn mine_block(&self) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + utils::mine_empty_blocks(&mut writer, 1, 1000); + tracing::info!("👷 Mined block #{}", writer.current_miniblock); + "0x0".to_string() + }) + } + + /// Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the id of the snapshot + /// that was created. A snapshot can only be reverted once. After a successful evm_revert, the same snapshot id cannot + /// be used again. Consider creating a new snapshot after each evm_revert if you need to revert to the same + /// point multiple times. + /// + /// # Returns + /// The `U64` identifier for this snapshot. + pub fn snapshot(&self) -> Result { + let snapshots = self.snapshots.clone(); + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|writer| { + // validate max snapshots + snapshots + .read() + .map_err(|err| anyhow!("failed acquiring read lock for snapshot: {:?}", err)) + .and_then(|snapshots| { + if snapshots.len() >= MAX_SNAPSHOTS as usize { + return Err(anyhow!( + "maximum number of '{}' snapshots exceeded", + MAX_SNAPSHOTS + )); + } + + Ok(()) + })?; + + // snapshot the node + let snapshot = writer.snapshot().map_err(|err| anyhow!("{}", err))?; + snapshots + .write() + .map(|mut snapshots| { + snapshots.push(snapshot); + tracing::info!("Created snapshot '{}'", snapshots.len()); + snapshots.len() + }) + .map_err(|err| anyhow!("failed storing snapshot: {:?}", err)) + .map(U64::from) + }) + } + + /// Revert the state of the blockchain to a previous snapshot. Takes a single parameter, + /// which is the snapshot id to revert to. This deletes the given snapshot, as well as any snapshots + /// taken after (e.g.: reverting to id 0x1 will delete snapshots with ids 0x1, 0x2, etc.) + /// + /// # Parameters + /// - `snapshot_id`: The snapshot id to revert. + /// + /// # Returns + /// `true` if a snapshot was reverted, otherwise `false`. + pub fn revert_snapshot(&self, snapshot_id: U64) -> Result { + let snapshots = self.snapshots.clone(); + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + let mut snapshots = snapshots.write().map_err(|err| { + anyhow!("failed acquiring read lock for snapshots: {:?}", err) + })?; + let snapshot_id_index = snapshot_id.as_usize().saturating_sub(1); + if snapshot_id_index >= snapshots.len() { + return Err(anyhow!("no snapshot exists for the id '{}'", snapshot_id)); + } + + // remove all snapshots following the index and use the first snapshot for restore + let selected_snapshot = snapshots + .drain(snapshot_id_index..) + .next() + .expect("unexpected failure, value must exist"); + + tracing::info!("Reverting node to snapshot '{snapshot_id:?}'"); + writer + .restore_snapshot(selected_snapshot) + .map(|_| { + tracing::info!("Reverting node to snapshot '{snapshot_id:?}'"); + true + }) + .map_err(|err| anyhow!("{}", err)) + }) + } + + pub fn set_balance(&self, address: Address, balance: U256) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + let balance_key = storage_key_for_eth_balance(&address); + writer + .fork_storage + .set_value(balance_key, u256_to_h256(balance)); + tracing::info!( + "👷 Balance for address {:?} has been manually set to {} Wei", + address, + balance + ); + true + }) + } + + pub fn set_nonce(&self, address: Address, nonce: U256) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + let nonce_key = get_nonce_key(&address); + let full_nonce = writer.fork_storage.read_value(&nonce_key); + let (mut account_nonce, mut deployment_nonce) = + decompose_full_nonce(h256_to_u256(full_nonce)); + if account_nonce >= nonce { + return Err(anyhow!( + "Account Nonce is already set to a higher value ({}, requested {})", + account_nonce, + nonce + )); + } + account_nonce = nonce; + if deployment_nonce >= nonce { + return Err(anyhow!( + "Deployment Nonce is already set to a higher value ({}, requested {})", + deployment_nonce, + nonce + )); + } + deployment_nonce = nonce; + let enforced_full_nonce = nonces_to_full_nonce(account_nonce, deployment_nonce); + tracing::info!( + "👷 Nonces for address {:?} have been set to {}", + address, + nonce + ); + writer + .fork_storage + .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); + Ok(true) + }) + } + + pub fn mine_blocks(&self, num_blocks: Option, interval: Option) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + let num_blocks = num_blocks.unwrap_or_else(|| U64::from(1)); + let interval_ms = interval + .unwrap_or_else(|| U64::from(1)) + .saturating_mul(1_000.into()); + if num_blocks.is_zero() { + return Err(anyhow!( + "Number of blocks must be greater than 0".to_string(), + )); + } + utils::mine_empty_blocks(&mut writer, num_blocks.as_u64(), interval_ms.as_u64()); + tracing::info!("👷 Mined {} blocks", num_blocks); + + Ok(true) + }) + } + + pub fn impersonate_account(&self, address: Address) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + if writer.set_impersonated_account(address) { + tracing::info!("🕵️ Account {:?} has been impersonated", address); + true + } else { + tracing::info!("🕵️ Account {:?} was already impersonated", address); + false + } + }) + } + + pub fn stop_impersonating_account(&self, address: Address) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + if writer.stop_impersonating_account(address) { + tracing::info!("🕵️ Stopped impersonating account {:?}", address); + true + } else { + tracing::info!( + "🕵️ Account {:?} was not impersonated, nothing to stop", + address + ); + false + } + }) + } + + pub fn set_code(&self, address: Address, code: Vec) -> Result<()> { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + let code_key = get_code_key(&address); + tracing::info!("set code for address {address:#x}"); + let (hash, code) = bytecode_to_factory_dep(code); + let hash = u256_to_h256(hash); + writer.fork_storage.store_factory_dep( + hash, + code.iter() + .flat_map(|entry| { + let mut bytes = vec![0u8; 32]; + entry.to_big_endian(&mut bytes); + bytes.to_vec() + }) + .collect(), + ); + writer.fork_storage.set_value(code_key, hash); + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{http_fork_source::HttpForkSource, node::InMemoryNode}; + use std::str::FromStr; + use zksync_basic_types::{Nonce, H256}; + use zksync_core::api_server::web3::backend_jsonrpc::namespaces::eth::EthNamespaceT; + use zksync_types::{api::BlockNumber, fee::Fee, l2::L2Tx, PackedEthSignature}; + + #[tokio::test] + async fn test_set_balance() { + let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); + let node = InMemoryNode::::default(); + + let balance_before = node.get_balance(address, None).await.unwrap(); + + let result = node.set_balance(address, U256::from(1337)).unwrap(); + assert!(result); + + let balance_after = node.get_balance(address, None).await.unwrap(); + assert_eq!(balance_after, U256::from(1337)); + assert_ne!(balance_before, balance_after); + } + + #[tokio::test] + async fn test_set_nonce() { + let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); + let node = InMemoryNode::::default(); + + let nonce_before = node.get_transaction_count(address, None).await.unwrap(); + + let result = node.set_nonce(address, U256::from(1337)).unwrap(); + assert!(result); + + let nonce_after = node.get_transaction_count(address, None).await.unwrap(); + assert_eq!(nonce_after, U256::from(1337)); + assert_ne!(nonce_before, nonce_after); + + // setting nonce lower than the current one should fail + let result = node.set_nonce(address, U256::from(1336)); + assert!(result.is_err()); + } + + #[tokio::test] + async fn test_mine_blocks_default() { + let node = InMemoryNode::::default(); + + let start_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + // test with defaults + let result = node.mine_blocks(None, None).expect("mine_blocks"); + assert!(result); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 1, current_block.number); + assert_eq!(start_block.timestamp + 1, current_block.timestamp); + let result = node.mine_blocks(None, None).expect("mine_blocks"); + assert!(result); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 2, current_block.number); + assert_eq!(start_block.timestamp + 2, current_block.timestamp); + } + + #[tokio::test] + async fn test_mine_blocks() { + let node = InMemoryNode::::default(); + + let start_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + let num_blocks = 5; + let interval = 3; + let start_timestamp = start_block.timestamp + 1; + + let result = node + .mine_blocks(Some(U64::from(num_blocks)), Some(U64::from(interval))) + .expect("mine blocks"); + assert!(result); + + for i in 0..num_blocks { + let current_block = node + .get_block_by_number(BlockNumber::Number(start_block.number + i + 1), false) + .await + .unwrap() + .expect("block exists"); + assert_eq!(start_block.number + i + 1, current_block.number); + assert_eq!( + start_timestamp + i * interval * 1_000, + current_block.timestamp + ); + } + } + + #[tokio::test] + async fn test_impersonate_account() { + let node = InMemoryNode::::default(); + let to_impersonate = + Address::from_str("0xd8da6bf26964af9d7eed9e03e53415d37aa96045").unwrap(); + + // give impersonated account some balance + let result = node.set_balance(to_impersonate, U256::exp10(18)).unwrap(); + assert!(result); + + // construct a tx + let mut tx = L2Tx::new( + Address::random(), + vec![], + Nonce(0), + Fee { + gas_limit: U256::from(1_000_000), + max_fee_per_gas: U256::from(250_000_000), + max_priority_fee_per_gas: U256::from(250_000_000), + gas_per_pubdata_limit: U256::from(20000), + }, + to_impersonate, + U256::one(), + None, + Default::default(), + ); + tx.set_input(vec![], H256::random()); + if tx.common_data.signature.is_empty() { + tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); + } + + // try to execute the tx- should fail without signature + assert!(node.apply_txs(vec![tx.clone()]).is_err()); + + // impersonate the account + let result = node + .impersonate_account(to_impersonate) + .expect("impersonate_account"); + + // result should be true + assert!(result); + + // impersonating the same account again should return false + let result = node + .impersonate_account(to_impersonate) + .expect("impersonate_account"); + assert!(!result); + + // execution should now succeed + assert!(node.apply_txs(vec![tx.clone()]).is_ok()); + + // stop impersonating the account + let result = node + .stop_impersonating_account(to_impersonate) + .expect("stop_impersonating_account"); + + // result should be true + assert!(result); + + // stop impersonating the same account again should return false + let result = node + .stop_impersonating_account(to_impersonate) + .expect("stop_impersonating_account"); + assert!(!result); + + // execution should now fail again + assert!(node.apply_txs(vec![tx]).is_err()); + } + + #[tokio::test] + async fn test_set_code() { + let address = Address::repeat_byte(0x1); + let node = InMemoryNode::::default(); + let new_code = vec![0x1u8; 32]; + + let code_before = node + .get_code(address, None) + .await + .expect("failed getting code") + .0; + assert_eq!(Vec::::default(), code_before); + + node.set_code(address, new_code.clone()) + .expect("failed setting code"); + + let code_after = node + .get_code(address, None) + .await + .expect("failed getting code") + .0; + assert_eq!(new_code, code_after); + } + + #[tokio::test] + async fn test_increase_time_zero_value() { + let node = InMemoryNode::::default(); + + let increase_value_seconds = 0u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + let expected_response = increase_value_seconds; + + let actual_response = node + .increase_time(increase_value_seconds) + .expect("failed increasing timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + increase_value_seconds.saturating_mul(1000u64), + timestamp_after.saturating_sub(timestamp_before), + "timestamp did not increase by the specified amount", + ); + } + + #[tokio::test] + async fn test_increase_time_max_value() { + let node = InMemoryNode::::default(); + + let increase_value_seconds = u64::MAX; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!(0, timestamp_before, "initial timestamp must be non zero",); + let expected_response = increase_value_seconds; + + let actual_response = node + .increase_time(increase_value_seconds) + .expect("failed increasing timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + u64::MAX, + timestamp_after, + "timestamp did not saturate upon increase", + ); + } + + #[tokio::test] + async fn test_increase_time() { + let node = InMemoryNode::::default(); + + let increase_value_seconds = 100u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + let expected_response = increase_value_seconds; + + let actual_response = node + .increase_time(increase_value_seconds) + .expect("failed increasing timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + increase_value_seconds.saturating_mul(1000u64), + timestamp_after.saturating_sub(timestamp_before), + "timestamp did not increase by the specified amount", + ); + } + + #[tokio::test] + async fn test_set_next_block_timestamp_future() { + let node = InMemoryNode::::default(); + + let new_timestamp = 10_000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!( + timestamp_before, new_timestamp, + "timestamps must be different" + ); + let expected_response = new_timestamp; + + let actual_response = node + .set_next_block_timestamp(new_timestamp) + .expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + new_timestamp, timestamp_after, + "timestamp was not set correctly", + ); + } + + #[tokio::test] + async fn test_set_next_block_timestamp_past_fails() { + let node = InMemoryNode::::default(); + + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + let new_timestamp = timestamp_before + 500; + node.set_next_block_timestamp(new_timestamp) + .expect("failed setting timestamp"); + + let result = node.set_next_block_timestamp(timestamp_before); + + assert!(result.is_err(), "expected an error for timestamp in past"); + } + + #[tokio::test] + async fn test_set_next_block_timestamp_same_value() { + let node = InMemoryNode::::default(); + + let new_timestamp = 1000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_eq!(timestamp_before, new_timestamp, "timestamps must be same"); + let expected_response = new_timestamp; + + let actual_response = node + .set_next_block_timestamp(new_timestamp) + .expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + timestamp_before, timestamp_after, + "timestamp must not change", + ); + } + + #[tokio::test] + async fn test_set_time_future() { + let node = InMemoryNode::::default(); + + let new_time = 10_000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!(timestamp_before, new_time, "timestamps must be different"); + let expected_response = 9000; + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); + } + + #[tokio::test] + async fn test_set_time_past() { + let node = InMemoryNode::::default(); + + let new_time = 10u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!(timestamp_before, new_time, "timestamps must be different"); + let expected_response = -990; + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); + } + + #[tokio::test] + async fn test_set_time_same_value() { + let node = InMemoryNode::::default(); + + let new_time = 1000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_eq!(timestamp_before, new_time, "timestamps must be same"); + let expected_response = 0; + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + timestamp_before, timestamp_after, + "timestamp must not change", + ); + } + + #[tokio::test] + async fn test_set_time_edges() { + let node = InMemoryNode::::default(); + + for new_time in [0, u64::MAX] { + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); + assert_ne!( + timestamp_before, new_time, + "case {new_time}: timestamps must be different" + ); + let expected_response = (new_time as i128).saturating_sub(timestamp_before as i128); + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); + + assert_eq!( + expected_response, actual_response, + "case {new_time}: erroneous response" + ); + assert_eq!( + new_time, timestamp_after, + "case {new_time}: timestamp was not set correctly", + ); + } + } + + #[tokio::test] + async fn test_mine_block() { + let node = InMemoryNode::::default(); + + let start_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + let result = node.mine_block().expect("mine_block"); + assert_eq!(&result, "0x0"); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 1, current_block.number); + assert_eq!(start_block.timestamp + 1, current_block.timestamp); + + let result = node.mine_block().expect("mine_block"); + assert_eq!(&result, "0x0"); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 2, current_block.number); + assert_eq!(start_block.timestamp + 2, current_block.timestamp); + } + + #[tokio::test] + async fn test_evm_snapshot_creates_incrementing_ids() { + let node = InMemoryNode::::default(); + + let snapshot_id_1 = node.snapshot().expect("failed creating snapshot 1"); + let snapshot_id_2 = node.snapshot().expect("failed creating snapshot 2"); + + assert_eq!(snapshot_id_1, U64::from(1)); + assert_eq!(snapshot_id_2, U64::from(2)); + } + + #[tokio::test] + async fn test_evm_revert_snapshot_restores_state() { + let node = InMemoryNode::::default(); + + let initial_block = node + .get_block_number() + .await + .expect("failed fetching block number"); + let snapshot_id = node.snapshot().expect("failed creating snapshot"); + node.mine_block().expect("mine_block"); + let current_block = node + .get_block_number() + .await + .expect("failed fetching block number"); + assert_eq!(current_block, initial_block + 1); + + let reverted = node + .revert_snapshot(snapshot_id) + .expect("failed reverting snapshot"); + assert!(reverted); + + let restored_block = node + .get_block_number() + .await + .expect("failed fetching block number"); + assert_eq!(restored_block, initial_block); + } + + #[tokio::test] + async fn test_evm_revert_snapshot_removes_all_snapshots_following_the_reverted_one() { + let node = InMemoryNode::::default(); + + let _snapshot_id_1 = node.snapshot().expect("failed creating snapshot"); + let snapshot_id_2 = node.snapshot().expect("failed creating snapshot"); + let _snapshot_id_3 = node.snapshot().expect("failed creating snapshot"); + assert_eq!(3, node.snapshots.read().unwrap().len()); + + let reverted = node + .revert_snapshot(snapshot_id_2) + .expect("failed reverting snapshot"); + assert!(reverted); + + assert_eq!(1, node.snapshots.read().unwrap().len()); + } + + #[tokio::test] + async fn test_evm_revert_snapshot_fails_for_invalid_snapshot_id() { + let node = InMemoryNode::::default(); + + let result = node.revert_snapshot(U64::from(100)); + assert!(result.is_err()); + } +} diff --git a/src/node/mod.rs b/src/node/mod.rs new file mode 100644 index 00000000..e6638025 --- /dev/null +++ b/src/node/mod.rs @@ -0,0 +1,14 @@ +//! In-memory node, that supports forking other networks. + +mod config; +mod debug; +mod eth; +mod evm; +mod hardhat; +mod in_memory; +mod in_memory_ext; +mod net; +mod web3; +mod zks; + +pub use in_memory::*; diff --git a/src/node/net.rs b/src/node/net.rs new file mode 100644 index 00000000..e61d60f9 --- /dev/null +++ b/src/node/net.rs @@ -0,0 +1,23 @@ +use zksync_basic_types::U256; + +use crate::{ + fork::ForkSource, + namespaces::{NetNamespaceT, Result}, + node::{InMemoryNode, TEST_NODE_NETWORK_ID}, +}; + +impl NetNamespaceT + for InMemoryNode +{ + fn net_version(&self) -> Result { + Ok(TEST_NODE_NETWORK_ID.to_string()) + } + + fn net_peer_count(&self) -> Result { + Ok(U256::from(0)) + } + + fn net_listening(&self) -> Result { + Ok(false) + } +} diff --git a/src/node/web3.rs b/src/node/web3.rs new file mode 100644 index 00000000..1b7402d5 --- /dev/null +++ b/src/node/web3.rs @@ -0,0 +1,13 @@ +use crate::{ + fork::ForkSource, + namespaces::{Result, Web3NamespaceT}, + node::InMemoryNode, +}; + +impl Web3NamespaceT + for InMemoryNode +{ + fn web3_client_version(&self) -> Result { + Ok("zkSync/v2.0".to_string()) + } +} diff --git a/src/zks.rs b/src/node/zks.rs similarity index 72% rename from src/zks.rs rename to src/node/zks.rs index 02df314a..297cb596 100644 --- a/src/zks.rs +++ b/src/node/zks.rs @@ -1,21 +1,21 @@ -use std::sync::{Arc, RwLock}; +use std::collections::HashMap; use bigdecimal::BigDecimal; +use colored::Colorize; use futures::FutureExt; -use zksync_basic_types::{Address, L1BatchNumber, MiniblockNumber, U256}; -use zksync_core::api_server::web3::backend_jsonrpc::{ - error::{internal_error, into_jsrpc_error}, - namespaces::zks::ZksNamespaceT, -}; +use zksync_basic_types::{AccountTreeId, Address, L1BatchNumber, MiniblockNumber, H256, U256}; +use zksync_core::api_server::web3::backend_jsonrpc::error::{internal_error, into_jsrpc_error}; use zksync_state::ReadStorage; use zksync_types::{ api::{ - BlockDetails, BlockDetailsBase, BlockStatus, BridgeAddresses, ProtocolVersion, + BlockDetails, BlockDetailsBase, BlockStatus, BridgeAddresses, Proof, ProtocolVersion, TransactionDetails, TransactionStatus, TransactionVariant, }, fee::Fee, - ExecuteTransactionCommon, ProtocolVersionId, Transaction, + utils::storage_key_for_standard_token_balance, + ExecuteTransactionCommon, ProtocolVersionId, Transaction, L2_ETH_TOKEN_ADDRESS, }; +use zksync_utils::h256_to_u256; use zksync_web3_decl::{ error::Web3Error, types::{Filter, Log}, @@ -23,25 +23,13 @@ use zksync_web3_decl::{ use crate::{ fork::ForkSource, - node::{InMemoryNodeInner, TransactionResult, L2_GAS_PRICE}, + namespaces::{RpcResult, ZksNamespaceT}, + node::{InMemoryNode, TransactionResult, L2_GAS_PRICE}, utils::{not_implemented, utc_datetime_from_epoch_ms, IntoBoxedFuture}, }; -use colored::Colorize; - -/// Mock implementation of ZksNamespace - used only in the test node. -pub struct ZkMockNamespaceImpl { - node: Arc>>, -} - -impl ZkMockNamespaceImpl { - /// Creates a new `Zks` instance with the given `node`. - pub fn new(node: Arc>>) -> Self { - Self { node } - } -} -impl ZksNamespaceT - for ZkMockNamespaceImpl +impl ZksNamespaceT + for InMemoryNode { /// Estimates the gas fee data required for a given call request. /// @@ -52,22 +40,15 @@ impl ZksNamespaceT /// # Returns /// /// A `BoxFuture` containing a `Result` with a `Fee` representing the estimated gas data required. - fn estimate_fee( - &self, - req: zksync_types::transaction_request::CallRequest, - ) -> jsonrpc_core::BoxFuture> { - let reader = match self.node.read() { - Ok(r) => r, - Err(_) => { - return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() - } - }; - - let result: jsonrpc_core::Result = reader.estimate_gas_impl(req); - match result { - Ok(fee) => Ok(fee).into_boxed_future(), - Err(err) => return futures::future::err(err).boxed(), - } + fn estimate_fee(&self, req: zksync_types::transaction_request::CallRequest) -> RpcResult { + self.get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .and_then(|reader| reader.estimate_gas_impl(req)) + .into_boxed_future() } /// Returns data of transactions in a block. @@ -82,8 +63,8 @@ impl ZksNamespaceT fn get_raw_block_transactions( &self, block_number: MiniblockNumber, - ) -> jsonrpc_core::BoxFuture>> { - let inner = self.node.clone(); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -140,29 +121,32 @@ impl ZksNamespaceT }) } + fn get_proof( + &self, + _address: Address, + _keys: Vec, + _l1_batch_number: L1BatchNumber, + ) -> RpcResult { + not_implemented("zks_getProof") + } + fn estimate_gas_l1_to_l2( &self, _req: zksync_types::transaction_request::CallRequest, - ) -> jsonrpc_core::BoxFuture> { + ) -> RpcResult { not_implemented("zks_estimateGasL1ToL2") } - fn get_main_contract( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn get_main_contract(&self) -> RpcResult { not_implemented("zks_getMainContract") } - fn get_testnet_paymaster( - &self, - ) -> jsonrpc_core::BoxFuture>> { + fn get_testnet_paymaster(&self) -> RpcResult> { not_implemented("zks_getTestnetPaymaster") } - fn get_bridge_contracts( - &self, - ) -> jsonrpc_core::BoxFuture> { - let inner = self.node.clone(); + fn get_bridge_contracts(&self) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -192,24 +176,44 @@ impl ZksNamespaceT }) } - fn l1_chain_id( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn l1_chain_id(&self) -> RpcResult { not_implemented("zks_L1ChainId") } fn get_confirmed_tokens( &self, - _from: u32, - _limit: u8, + from: u32, + limit: u8, ) -> jsonrpc_core::BoxFuture>> { - not_implemented("zks_getConfirmedTokens") + let inner = self.get_inner().clone(); + Box::pin(async move { + let reader = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let fork_storage_read = reader + .fork_storage + .inner + .read() + .expect("failed reading fork storage"); + + match fork_storage_read.fork.as_ref() { + Some(fork) => Ok(fork + .fork_source + .get_confirmed_tokens(from, limit) + .map_err(|_e| into_jsrpc_error(Web3Error::InternalError))?), + None => Ok(vec![zksync_web3_decl::types::Token { + l1_address: Address::zero(), + l2_address: L2_ETH_TOKEN_ADDRESS, + name: "Ether".to_string(), + symbol: "ETH".to_string(), + decimals: 18, + }]), + } + }) } - fn get_token_price( - &self, - token_address: zksync_basic_types::Address, - ) -> jsonrpc_core::BoxFuture> { + fn get_token_price(&self, token_address: zksync_basic_types::Address) -> RpcResult { match format!("{:?}", token_address).to_lowercase().as_str() { "0x0000000000000000000000000000000000000000" => { // ETH @@ -241,13 +245,48 @@ impl ZksNamespaceT } } + /// Get all known balances for a given account. + /// + /// # Arguments + /// + /// * `address` - The user address with balances to check. + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a (Token, Balance) map where account has non-zero value. fn get_all_account_balances( &self, - _address: zksync_basic_types::Address, + address: zksync_basic_types::Address, ) -> jsonrpc_core::BoxFuture< jsonrpc_core::Result>, > { - not_implemented("zks_getAllAccountBalances") + let inner = self.get_inner().clone(); + Box::pin({ + self.get_confirmed_tokens(0, 100) + .then(move |tokens| async move { + let tokens = + tokens.map_err(|_err| into_jsrpc_error(Web3Error::InternalError))?; + + let mut writer = inner + .write() + .map_err(|_err| into_jsrpc_error(Web3Error::InternalError))?; + + let mut balances = HashMap::new(); + for token in tokens { + let balance_key = storage_key_for_standard_token_balance( + AccountTreeId::new(token.l2_address), + &address, + ); + + let balance = writer.fork_storage.read_value(&balance_key); + if !balance.is_zero() { + balances.insert(token.l2_address, h256_to_u256(balance)); + } + } + + Ok(balances) + }) + }) } fn get_l2_to_l1_msg_proof( @@ -256,8 +295,7 @@ impl ZksNamespaceT _sender: zksync_basic_types::Address, _msg: zksync_basic_types::H256, _l2_log_position: Option, - ) -> jsonrpc_core::BoxFuture>> - { + ) -> RpcResult> { not_implemented("zks_getL2ToL1MsgProof") } @@ -265,14 +303,11 @@ impl ZksNamespaceT &self, _tx_hash: zksync_basic_types::H256, _index: Option, - ) -> jsonrpc_core::BoxFuture>> - { + ) -> RpcResult> { not_implemented("zks_getL2ToL1LogProof") } - fn get_l1_batch_number( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn get_l1_batch_number(&self) -> RpcResult { not_implemented("zks_L1BatchNumber") } @@ -288,9 +323,8 @@ impl ZksNamespaceT fn get_block_details( &self, block_number: zksync_basic_types::MiniblockNumber, - ) -> jsonrpc_core::BoxFuture>> - { - let inner = self.node.clone(); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -368,9 +402,8 @@ impl ZksNamespaceT fn get_transaction_details( &self, hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> - { - let inner = self.node.clone(); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -433,8 +466,7 @@ impl ZksNamespaceT fn get_l1_batch_details( &self, _batch: zksync_basic_types::L1BatchNumber, - ) -> jsonrpc_core::BoxFuture>> - { + ) -> RpcResult> { Box::pin(async { Ok(None) }) } @@ -447,11 +479,8 @@ impl ZksNamespaceT /// # Returns /// /// A boxed future resolving to a `jsonrpc_core::Result` containing an `Option` of bytes. - fn get_bytecode_by_hash( - &self, - hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>>> { - let inner = self.node.clone(); + fn get_bytecode_by_hash(&self, hash: zksync_basic_types::H256) -> RpcResult>> { + let inner = self.get_inner().clone(); Box::pin(async move { let mut writer = inner .write() @@ -472,23 +501,15 @@ impl ZksNamespaceT }) } - fn get_l1_gas_price( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn get_l1_gas_price(&self) -> RpcResult { not_implemented("zks_getL1GasPrice") } - fn get_protocol_version( - &self, - _version_id: Option, - ) -> jsonrpc_core::BoxFuture>> { + fn get_protocol_version(&self, _version_id: Option) -> RpcResult> { not_implemented("zks_getProtocolVersion") } - fn get_logs_with_virtual_blocks( - &self, - _filter: Filter, - ) -> jsonrpc_core::BoxFuture>> { + fn get_logs_with_virtual_blocks(&self, _filter: Filter) -> RpcResult> { not_implemented("zks_getLogs") } } @@ -507,11 +528,11 @@ mod tests { use zksync_basic_types::{Address, H160, H256}; use zksync_types::api::{self, Block, TransactionReceipt, TransactionVariant}; use zksync_types::transaction_request::CallRequest; + use zksync_utils::u256_to_h256; #[tokio::test] async fn test_estimate_fee() { let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_request = CallRequest { from: Some( @@ -536,9 +557,9 @@ mod tests { eip712_meta: None, }; - let result = namespace.estimate_fee(mock_request).await.unwrap(); + let result = node.estimate_fee(mock_request).await.unwrap(); - assert_eq!(result.gas_limit, U256::from(731457)); + assert_eq!(result.gas_limit, U256::from(746532)); assert_eq!(result.max_fee_per_gas, U256::from(250000000)); assert_eq!(result.max_priority_fee_per_gas, U256::from(0)); assert_eq!(result.gas_per_pubdata_limit, U256::from(4080)); @@ -548,13 +569,12 @@ mod tests { async fn test_get_token_price_given_eth_should_return_price() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_address = Address::from_str("0x0000000000000000000000000000000000000000") .expect("Failed to parse address"); // Act - let result = namespace.get_token_price(mock_address).await.unwrap(); + let result = node.get_token_price(mock_address).await.unwrap(); // Assert assert_eq!(result, BigDecimal::from(1_500)); @@ -564,13 +584,12 @@ mod tests { async fn test_get_token_price_given_capitalized_link_address_should_return_price() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_address = Address::from_str("0x40609141Db628BeEE3BfAB8034Fc2D8278D0Cc78") .expect("Failed to parse address"); // Act - let result = namespace.get_token_price(mock_address).await.unwrap(); + let result = node.get_token_price(mock_address).await.unwrap(); // Assert assert_eq!(result, BigDecimal::from(1)); @@ -580,13 +599,12 @@ mod tests { async fn test_get_token_price_given_unknown_address_should_return_error() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_address = Address::from_str("0x0000000000000000000000000000000000000042") .expect("Failed to parse address"); // Act - let result = namespace.get_token_price(mock_address).await; + let result = node.get_token_price(mock_address).await; // Assert assert!(result.is_err()); @@ -596,7 +614,6 @@ mod tests { async fn test_get_transaction_details_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let inner = node.get_inner(); { let mut writer = inner.write().unwrap(); @@ -614,8 +631,7 @@ mod tests { }, ); } - // Act - let result = namespace + let result = node .get_transaction_details(H256::repeat_byte(0x1)) .await .expect("get transaction details") @@ -666,8 +682,7 @@ mod tests { Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - let result = namespace + let result = node .get_transaction_details(input_tx_hash) .await .expect("get transaction details") @@ -681,7 +696,6 @@ mod tests { async fn test_get_block_details_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let inner = node.get_inner(); { let mut writer = inner.write().unwrap(); @@ -689,8 +703,7 @@ mod tests { writer.blocks.insert(H256::repeat_byte(0x1), block); writer.block_hashes.insert(0, H256::repeat_byte(0x1)); } - // Act - let result = namespace + let result = node .get_block_details(MiniblockNumber(0)) .await .expect("get block details") @@ -754,8 +767,7 @@ mod tests { Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - let result = namespace + let result = node .get_block_details(miniblock) .await .expect("get block details") @@ -770,7 +782,6 @@ mod tests { async fn test_get_bridge_contracts_uses_default_values_if_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let expected_bridge_addresses = BridgeAddresses { l1_erc20_default_bridge: Default::default(), l2_erc20_default_bridge: Default::default(), @@ -778,8 +789,7 @@ mod tests { l2_weth_bridge: Default::default(), }; - // Act - let actual_bridge_addresses = namespace + let actual_bridge_addresses = node .get_bridge_contracts() .await .expect("get bridge addresses"); @@ -813,8 +823,8 @@ mod tests { "result": { "l1Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l1_erc20_default_bridge), "l2Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l2_erc20_default_bridge), - "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.clone().unwrap()), - "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.clone().unwrap()) + "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.unwrap()), + "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.unwrap()) }, "id": 0 }), @@ -825,10 +835,8 @@ mod tests { None, Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - // Act - let actual_bridge_addresses = namespace + let actual_bridge_addresses = node .get_bridge_contracts() .await .expect("get bridge addresses"); @@ -841,7 +849,6 @@ mod tests { async fn test_get_bytecode_by_hash_returns_local_value_if_available() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let input_hash = H256::repeat_byte(0x1); let input_bytecode = vec![0x1]; node.get_inner() @@ -850,8 +857,7 @@ mod tests { .fork_storage .store_factory_dep(input_hash, input_bytecode.clone()); - // Act - let actual = namespace + let actual = node .get_bytecode_by_hash(input_hash) .await .expect("failed fetching bytecode") @@ -892,10 +898,8 @@ mod tests { None, Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - // Act - let actual = namespace + let actual = node .get_bytecode_by_hash(input_hash) .await .expect("failed fetching bytecode") @@ -909,7 +913,6 @@ mod tests { async fn test_get_raw_block_transactions_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let inner = node.get_inner(); { let mut writer = inner.write().unwrap(); @@ -933,8 +936,7 @@ mod tests { writer.block_hashes.insert(0, H256::repeat_byte(0x1)); } - // Act - let txns = namespace + let txns = node .get_raw_block_transactions(MiniblockNumber(0)) .await .expect("get transaction details"); @@ -1018,11 +1020,156 @@ mod tests { Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - let txns = namespace + let txns = node .get_raw_block_transactions(miniblock) .await .expect("get transaction details"); assert_eq!(txns.len(), 1); } + + #[tokio::test] + async fn test_get_all_account_balances_empty() { + let node = InMemoryNode::::default(); + let balances = node + .get_all_account_balances(Address::zero()) + .await + .expect("get balances"); + assert!(balances.is_empty()); + } + + #[tokio::test] + async fn test_get_confirmed_tokens_eth() { + let node = InMemoryNode::::default(); + let balances = node + .get_confirmed_tokens(0, 100) + .await + .expect("get balances"); + assert_eq!(balances.len(), 1); + assert_eq!(&balances[0].name, "Ether"); + } + + #[tokio::test] + async fn test_get_all_account_balances_forked() { + let cbeth_address = Address::from_str("0x75af292c1c9a37b3ea2e6041168b4e48875b9ed5") + .expect("failed to parse address"); + let mock_server = testing::MockServer::run(); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 0, + "method": "zks_getBlockDetails", + "params": [1] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": { + "baseSystemContractsHashes": { + "bootloader": "0x010008a5c30072f79f8e04f90b31f34e554279957e7e2bf85d3e9c7c1e0f834d", + "default_aa": "0x01000663d7941c097ba2631096508cf9ec7769ddd40e081fd81b0d04dc07ea0e" + }, + "commitTxHash": null, + "committedAt": null, + "executeTxHash": null, + "executedAt": null, + "l1BatchNumber": 0, + "l1GasPrice": 0, + "l1TxCount": 1, + "l2FairGasPrice": 250000000, + "l2TxCount": 0, + "number": 0, + "operatorAddress": "0x0000000000000000000000000000000000000000", + "protocolVersion": "Version16", + "proveTxHash": null, + "provenAt": null, + "rootHash": "0xdaa77426c30c02a43d9fba4e841a6556c524d47030762eb14dc4af897e605d9b", + "status": "verified", + "timestamp": 1000 + }, + "id": 0 + }), + ); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 1, + "method": "eth_getBlockByHash", + "params": ["0xdaa77426c30c02a43d9fba4e841a6556c524d47030762eb14dc4af897e605d9b", true] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": { + "baseFeePerGas": "0x0", + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0xffffffff", + "gasUsed": "0x0", + "hash": "0xdaa77426c30c02a43d9fba4e841a6556c524d47030762eb14dc4af897e605d9b", + "l1BatchNumber": "0x0", + "l1BatchTimestamp": null, + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x0000000000000000000000000000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "sealFields": [], + "sha3Uncles": "0x0000000000000000000000000000000000000000000000000000000000000000", + "size": "0x0", + "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x3e8", + "totalDifficulty": "0x0", + "transactions": [], + "transactionsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncles": [] + }, + "id": 1 + }), + ); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 0, + "method": "zks_getConfirmedTokens", + "params": [0, 100] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": [ + { + "decimals": 18, + "l1Address": "0xbe9895146f7af43049ca1c1ae358b0541ea49704", + "l2Address": "0x75af292c1c9a37b3ea2e6041168b4e48875b9ed5", + "name": "Coinbase Wrapped Staked ETH", + "symbol": "cbETH" + } + ], + "id": 0 + }), + ); + + let node = InMemoryNode::::new( + Some(ForkDetails::from_network(&mock_server.url(), Some(1), CacheConfig::None).await), + None, + Default::default(), + ); + { + let inner = node.get_inner(); + let writer = inner.write().unwrap(); + let mut fork = writer.fork_storage.inner.write().unwrap(); + fork.raw_storage.set_value( + storage_key_for_standard_token_balance( + AccountTreeId::new(cbeth_address), + &Address::repeat_byte(0x1), + ), + u256_to_h256(U256::from(1337)), + ); + } + + let balances = node + .get_all_account_balances(Address::repeat_byte(0x1)) + .await + .expect("get balances"); + assert_eq!(balances.get(&cbeth_address).unwrap(), &U256::from(1337)); + } } diff --git a/src/observability.rs b/src/observability.rs index 1c2bbb1e..ec3039b6 100644 --- a/src/observability.rs +++ b/src/observability.rs @@ -4,8 +4,7 @@ use std::{fs::File, sync::Mutex}; use clap::ValueEnum; use serde::{Deserialize, Serialize}; use tracing_subscriber::{ - filter::LevelFilter, layer::SubscriberExt, reload, util::SubscriberInitExt, EnvFilter, Layer, - Registry, + filter::LevelFilter, layer::SubscriberExt, reload, util::SubscriberInitExt, EnvFilter, Registry, }; /// Log filter level for the node. @@ -63,14 +62,33 @@ impl Observability { format!("{log_level_filter}").to_lowercase() ))?; let (filter, reload_handle) = reload::Layer::new(filter); + + let timer_format = + time::format_description::parse("[hour]:[minute]:[second]").expect("Cataplum"); + let time_offset = time::UtcOffset::current_local_offset().unwrap_or(time::UtcOffset::UTC); + let timer = tracing_subscriber::fmt::time::OffsetTime::new(time_offset, timer_format); + tracing_subscriber::registry() + .with(filter) .with( - filter.and_then(tracing_subscriber::fmt::layer()).and_then( - tracing_subscriber::fmt::layer() - .with_writer(Mutex::new(log_file)) - .with_ansi(false), + tracing_subscriber::fmt::layer().event_format( + tracing_subscriber::fmt::format() + .compact() + .with_timer(timer.clone()) + .with_target(false), ), ) + .with( + tracing_subscriber::fmt::layer() + .event_format( + tracing_subscriber::fmt::format() + .compact() + .with_timer(timer.clone()) + .with_target(false), + ) + .with_writer(Mutex::new(log_file)) + .with_ansi(false), + ) .init(); Ok(Self { diff --git a/src/system_contracts.rs b/src/system_contracts.rs index 35823a8f..1926e7b0 100644 --- a/src/system_contracts.rs +++ b/src/system_contracts.rs @@ -1,4 +1,4 @@ -use vm::TxExecutionMode; +use multivm::interface::TxExecutionMode; use zksync_contracts::{ read_playground_batch_bootloader_bytecode, read_proved_batch_bootloader_bytecode, read_sys_contract_bytecode, read_zbin_bytecode, BaseSystemContracts, ContractLanguage, @@ -72,13 +72,17 @@ impl SystemContracts { match (execution_mode, impersonating) { // 'real' contracts, that do all the checks. (TxExecutionMode::VerifyExecute, false) => &self.baseline_contracts, - // Ignore invalid sigatures. These requests are often coming unsigned, and they keep changing the + // Ignore invalid signatures. These requests are often coming unsigned, and they keep changing the // gas limit - so the signatures are often not matching. (TxExecutionMode::EstimateFee, false) => &self.fee_estimate_contracts, // Read-only call - don't check signatures, have a lower (fixed) gas limit. - (TxExecutionMode::EthCall, _) => &self.playground_contracts, + (TxExecutionMode::EthCall, false) => &self.playground_contracts, + // Without account validation and sender related checks. (TxExecutionMode::VerifyExecute, true) => &self.baseline_impersonating_contracts, (TxExecutionMode::EstimateFee, true) => &self.fee_estimate_impersonating_contracts, + (TxExecutionMode::EthCall, true) => { + panic!("Account impersonating with eth_call is not supported") + } } } } @@ -101,8 +105,12 @@ fn bsc_load_with_bootloader( include_bytes!("deps/contracts/DefaultAccount.json"), ), Options::Local => read_sys_contract_bytecode("", "DefaultAccount", ContractLanguage::Sol), - // TODO: remove - Options::BuiltInWithoutSecurity => unimplemented!(), + // TODO: restore + Options::BuiltInWithoutSecurity => bytecode_from_slice( + "DefaultAccountNoSecurity", + // include_bytes!("deps/contracts/DefaultAccountNoSecurity.json"), + include_bytes!("deps/contracts/DefaultAccount.json"), + ), }; let hash = hash_bytecode(&bytecode); @@ -142,8 +150,7 @@ pub fn playground(options: &Options) -> BaseSystemContracts { /// It sets ENSURE_RETURNED_MAGIC to 0 and BOOTLOADER_TYPE to 'playground_block' pub fn fee_estimate_contracts(options: &Options) -> BaseSystemContracts { let bootloader_bytecode = match options { - Options::BuiltIn | - Options::BuiltInWithoutSecurity => { + Options::BuiltIn | Options::BuiltInWithoutSecurity => { include_bytes!("deps/contracts/fee_estimate.yul.zbin").to_vec() } Options::Local => @@ -155,13 +162,12 @@ pub fn fee_estimate_contracts(options: &Options) -> BaseSystemContracts { pub fn fee_estimate_impersonating_contracts(options: &Options) -> BaseSystemContracts { let bootloader_bytecode = match options { - Options::BuiltIn | - Options::BuiltInWithoutSecurity => { + Options::BuiltIn | Options::BuiltInWithoutSecurity => { include_bytes!("deps/contracts/fee_estimate_impersonating.yul.zbin").to_vec() } Options::Local => - // TODO: maybe not supported? - read_zbin_bytecode("etc/system-contracts/bootloader/build/artifacts/fee_estimate.yul/fee_estimate_impersonating.yul.zbin") + // Account impersonating is not supported with the local contracts + read_zbin_bytecode("etc/system-contracts/bootloader/build/artifacts/fee_estimate.yul/fee_estimate.yul.zbin") }; bsc_load_with_bootloader(bootloader_bytecode, options) @@ -182,7 +188,7 @@ pub fn baseline_impersonating_contracts(options: &Options) -> BaseSystemContract Options::BuiltIn | Options::BuiltInWithoutSecurity => { include_bytes!("deps/contracts/proved_batch_impersonating.yul.zbin").to_vec() } - // TODO: should be supported? + // Account impersonating is not supported with the local contracts Options::Local => read_proved_batch_bootloader_bytecode(), }; bsc_load_with_bootloader(bootloader_bytecode, options) diff --git a/src/testing.rs b/src/testing.rs index 12568d1a..87620b02 100644 --- a/src/testing.rs +++ b/src/testing.rs @@ -5,6 +5,7 @@ #![cfg(test)] +use crate::deps::InMemoryStorage; use crate::node::{InMemoryNode, TxExecutionInfo}; use crate::{fork::ForkSource, node::compute_hash}; @@ -15,14 +16,14 @@ use httptest::{ Expectation, Server, }; use itertools::Itertools; +use multivm::interface::{ExecutionResult, VmExecutionResultAndLogs}; use std::str::FromStr; -use vm::VmExecutionResultAndLogs; -use zksync_basic_types::{H160, U64}; -use zksync_types::api::{BridgeAddresses, DebugCall, DebugCallType, Log}; -use zksync_types::{ - fee::Fee, l2::L2Tx, Address, L2ChainId, Nonce, PackedEthSignature, ProtocolVersionId, H256, - U256, -}; +use zksync_basic_types::{AccountTreeId, MiniblockNumber, H160, U64}; +use zksync_types::api::{BlockIdVariant, BridgeAddresses, DebugCall, DebugCallType, Log}; +use zksync_types::block::pack_block_info; +use zksync_types::StorageKey; +use zksync_types::{fee::Fee, l2::L2Tx, Address, L2ChainId, Nonce, ProtocolVersionId, H256, U256}; +use zksync_utils::u256_to_h256; /// Configuration for the [MockServer]'s initial block. #[derive(Default, Debug, Clone)] @@ -275,8 +276,7 @@ impl TransactionResponseBuilder { "type": "0xff", "maxFeePerGas": "0x0", "maxPriorityFeePerGas": "0x0", - // TODO: can be changed back to "0x104" after zksync-era update - "chainId": 260, + "chainId": "0x104", "l1BatchNumber": "0x1", "l1BatchTxIndex": "0x0", }) @@ -358,8 +358,77 @@ impl RawTransactionsResponseBuilder { } } +#[derive(Debug, Clone)] +pub struct TransactionBuilder { + tx_hash: H256, + from_account_private_key: H256, + gas_limit: U256, + max_fee_per_gas: U256, + max_priority_fee_per_gas: U256, +} + +impl Default for TransactionBuilder { + fn default() -> Self { + Self { + tx_hash: H256::repeat_byte(0x01), + from_account_private_key: H256::random(), + gas_limit: U256::from(1_000_000), + max_fee_per_gas: U256::from(250_000_000), + max_priority_fee_per_gas: U256::from(250_000_000), + } + } +} + +impl TransactionBuilder { + pub fn new() -> Self { + Self::default() + } + + pub fn set_hash(&mut self, hash: H256) -> &mut Self { + self.tx_hash = hash; + self + } + + pub fn set_gas_limit(&mut self, gas_limit: U256) -> &mut Self { + self.gas_limit = gas_limit; + self + } + + pub fn set_max_fee_per_gas(&mut self, max_fee_per_gas: U256) -> &mut Self { + self.max_fee_per_gas = max_fee_per_gas; + self + } + + pub fn set_max_priority_fee_per_gas(&mut self, max_priority_fee_per_gas: U256) -> &mut Self { + self.max_priority_fee_per_gas = max_priority_fee_per_gas; + self + } + + pub fn build(&mut self) -> L2Tx { + let mut tx = L2Tx::new_signed( + Address::random(), + vec![], + Nonce(0), + Fee { + gas_limit: self.gas_limit, + max_fee_per_gas: self.max_fee_per_gas, + max_priority_fee_per_gas: self.max_priority_fee_per_gas, + gas_per_pubdata_limit: U256::from(20000), + }, + U256::from(1), + L2ChainId::from(260), + &self.from_account_private_key, + None, + Default::default(), + ) + .unwrap(); + tx.set_input(vec![], self.tx_hash); + tx + } +} + /// Applies a transaction with a given hash to the node and returns the block hash. -pub fn apply_tx( +pub fn apply_tx( node: &InMemoryNode, tx_hash: H256, ) -> (H256, U64) { @@ -370,35 +439,15 @@ pub fn apply_tx( .expect("failed getting current batch number"); let produced_block_hash = compute_hash(next_miniblock, tx_hash); - let private_key = H256::random(); - let from_account = PackedEthSignature::address_from_private_key(&private_key) - .expect("failed generating address"); - node.set_rich_account(from_account); - let mut tx = L2Tx::new_signed( - Address::random(), - vec![], - Nonce(0), - Fee { - gas_limit: U256::from(1_000_000), - max_fee_per_gas: U256::from(250_000_000), - max_priority_fee_per_gas: U256::from(250_000_000), - gas_per_pubdata_limit: U256::from(20000), - }, - U256::from(1), - L2ChainId::from(260), - &private_key, - None, - Default::default(), - ) - .unwrap(); - tx.set_input(vec![], tx_hash); + let tx = TransactionBuilder::new().set_hash(tx_hash).build(); + node.set_rich_account(tx.common_data.initiator_address); node.apply_txs(vec![tx]).expect("failed applying tx"); (produced_block_hash, U64::from(next_miniblock)) } /// Deploys a contract with the given bytecode. -pub fn deploy_contract( +pub fn deploy_contract( node: &InMemoryNode, tx_hash: H256, private_key: H256, @@ -525,7 +574,7 @@ impl LogBuilder { log_index: Default::default(), transaction_log_index: Default::default(), log_type: Default::default(), - removed: Default::default(), + removed: Some(false), } } } @@ -563,7 +612,7 @@ pub fn default_tx_execution_info() -> TxExecutionInfo { batch_number: Default::default(), miniblock_number: Default::default(), result: VmExecutionResultAndLogs { - result: vm::ExecutionResult::Success { output: vec![] }, + result: ExecutionResult::Success { output: vec![] }, logs: Default::default(), statistics: Default::default(), refunds: Default::default(), @@ -623,7 +672,121 @@ pub fn assert_bridge_addresses_eq( ); } +/// Represents a read-only fork source that is backed by the provided [InMemoryStorage]. +#[derive(Debug, Clone)] +pub struct ExternalStorage { + pub raw_storage: InMemoryStorage, +} + +impl ForkSource for &ExternalStorage { + fn get_storage_at( + &self, + address: H160, + idx: U256, + _block: Option, + ) -> eyre::Result { + let key = StorageKey::new(AccountTreeId::new(address), u256_to_h256(idx)); + Ok(self + .raw_storage + .state + .get(&key) + .cloned() + .unwrap_or_default()) + } + + fn get_raw_block_transactions( + &self, + _block_number: MiniblockNumber, + ) -> eyre::Result> { + todo!() + } + + fn get_bytecode_by_hash(&self, hash: H256) -> eyre::Result>> { + Ok(self.raw_storage.factory_deps.get(&hash).cloned()) + } + + fn get_transaction_by_hash( + &self, + _hash: H256, + ) -> eyre::Result> { + todo!() + } + + fn get_transaction_details( + &self, + _hash: H256, + ) -> eyre::Result> { + todo!() + } + + fn get_block_by_hash( + &self, + _hash: H256, + _full_transactions: bool, + ) -> eyre::Result>> { + todo!() + } + + fn get_block_by_number( + &self, + _block_number: zksync_types::api::BlockNumber, + _full_transactions: bool, + ) -> eyre::Result>> { + todo!() + } + + fn get_block_details( + &self, + _miniblock: MiniblockNumber, + ) -> eyre::Result> { + todo!() + } + + fn get_block_transaction_count_by_hash(&self, _block_hash: H256) -> eyre::Result> { + todo!() + } + + fn get_block_transaction_count_by_number( + &self, + _block_number: zksync_types::api::BlockNumber, + ) -> eyre::Result> { + todo!() + } + + fn get_transaction_by_block_hash_and_index( + &self, + _block_hash: H256, + _index: zksync_basic_types::web3::types::Index, + ) -> eyre::Result> { + todo!() + } + + fn get_transaction_by_block_number_and_index( + &self, + _block_number: zksync_types::api::BlockNumber, + _index: zksync_basic_types::web3::types::Index, + ) -> eyre::Result> { + todo!() + } + + fn get_bridge_contracts(&self) -> eyre::Result { + todo!() + } + + fn get_confirmed_tokens( + &self, + _from: u32, + _limit: u8, + ) -> eyre::Result> { + todo!() + } +} + mod test { + use maplit::hashmap; + use zksync_types::block::unpack_block_info; + use zksync_utils::h256_to_u256; + use super::*; use crate::http_fork_source::HttpForkSource; @@ -769,4 +932,73 @@ mod test { log.topics ); } + + #[test] + fn test_external_storage() { + let input_batch = 1; + let input_l2_block = 2; + let input_timestamp = 3; + let input_bytecode = vec![0x4]; + let batch_key = StorageKey::new( + AccountTreeId::new(zksync_types::SYSTEM_CONTEXT_ADDRESS), + zksync_types::SYSTEM_CONTEXT_BLOCK_INFO_POSITION, + ); + let l2_block_key = StorageKey::new( + AccountTreeId::new(zksync_types::SYSTEM_CONTEXT_ADDRESS), + zksync_types::SYSTEM_CONTEXT_CURRENT_L2_BLOCK_INFO_POSITION, + ); + + let storage = &ExternalStorage { + raw_storage: InMemoryStorage { + state: hashmap! { + batch_key => u256_to_h256(U256::from(input_batch)), + l2_block_key => u256_to_h256(pack_block_info( + input_l2_block, + input_timestamp, + )) + }, + factory_deps: hashmap! { + H256::repeat_byte(0x1) => input_bytecode.clone(), + }, + }, + }; + + let actual_batch = storage + .get_storage_at( + zksync_types::SYSTEM_CONTEXT_ADDRESS, + h256_to_u256(zksync_types::SYSTEM_CONTEXT_BLOCK_INFO_POSITION), + None, + ) + .map(|value| h256_to_u256(value).as_u64()) + .expect("failed getting batch number"); + assert_eq!(input_batch, actual_batch); + + let (actual_l2_block, actual_timestamp) = storage + .get_storage_at( + zksync_types::SYSTEM_CONTEXT_ADDRESS, + h256_to_u256(zksync_types::SYSTEM_CONTEXT_CURRENT_L2_BLOCK_INFO_POSITION), + None, + ) + .map(|value| unpack_block_info(h256_to_u256(value))) + .expect("failed getting l2 block info"); + assert_eq!(input_l2_block, actual_l2_block); + assert_eq!(input_timestamp, actual_timestamp); + + let zero_missing_value = storage + .get_storage_at( + zksync_types::SYSTEM_CONTEXT_ADDRESS, + h256_to_u256(H256::repeat_byte(0x1e)), + None, + ) + .map(|value| h256_to_u256(value).as_u64()) + .expect("failed missing value"); + assert_eq!(0, zero_missing_value); + + let actual_bytecode = storage + .get_bytecode_by_hash(H256::repeat_byte(0x1)) + .ok() + .expect("failed getting bytecode") + .expect("missing bytecode"); + assert_eq!(input_bytecode, actual_bytecode); + } } diff --git a/src/utils.rs b/src/utils.rs index 75f5ae8f..41177594 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,11 +1,13 @@ use std::collections::HashMap; +use std::convert::TryInto; use std::pin::Pin; use chrono::{DateTime, Utc}; use futures::Future; -use vm::{ExecutionResult, VmExecutionResultAndLogs}; -use vm::{HistoryDisabled, Vm}; -use zksync_basic_types::{U256, U64}; +use multivm::interface::{ExecutionResult, VmExecutionResultAndLogs, VmInterface}; +use multivm::vm_latest::HistoryDisabled; +use multivm::vm_latest::{utils::fee::derive_base_fee_and_gas_per_pubdata, Vm}; +use zksync_basic_types::{H256, U256, U64}; use zksync_state::StorageView; use zksync_state::WriteStorage; use zksync_types::api::{BlockNumber, DebugCall, DebugCallType}; @@ -17,8 +19,6 @@ use zksync_web3_decl::error::Web3Error; use crate::node::create_empty_block; use crate::{fork::ForkSource, node::InMemoryNodeInner}; -use vm::utils::fee::derive_base_fee_and_gas_per_pubdata; - use zksync_utils::{bytecode::hash_bytecode, bytes_to_be_words}; pub(crate) trait IntoBoxedFuture: Sized + Send + 'static { @@ -119,12 +119,14 @@ pub fn mine_empty_blocks( } // init vm - let system_env = - node.create_system_env(bootloader_code.clone(), vm::TxExecutionMode::VerifyExecute); + let system_env = node.create_system_env( + bootloader_code.clone(), + multivm::interface::TxExecutionMode::VerifyExecute, + ); - let mut vm = Vm::new(batch_env, system_env, storage.clone(), HistoryDisabled); + let mut vm: Vm<_, HistoryDisabled> = Vm::new(batch_env, system_env, storage.clone()); - vm.execute(vm::VmExecutionMode::Bootloader); + vm.execute(multivm::interface::VmExecutionMode::Bootloader); let bytecodes: HashMap> = vm .get_last_tx_compressed_bytecodes() @@ -153,7 +155,12 @@ pub fn mine_empty_blocks( ) } - let block = create_empty_block(block_ctx.miniblock, block_ctx.timestamp, block_ctx.batch); + let block = create_empty_block( + block_ctx.miniblock, + block_ctx.timestamp, + block_ctx.batch, + None, + ); node.block_hashes.insert(block.number.as_u64(), block.hash); node.blocks.insert(block.hash, block); @@ -453,3 +460,9 @@ mod tests { } } } + +/// Converts `h256` value as BE into the u64 +pub fn h256_to_u64(value: H256) -> u64 { + let be_u64_bytes: [u8; 8] = value[24..].try_into().unwrap(); + u64::from_be_bytes(be_u64_bytes) +} diff --git a/test_endpoints.http b/test_endpoints.http index bc130ba2..5a2d56ff 100644 --- a/test_endpoints.http +++ b/test_endpoints.http @@ -729,6 +729,28 @@ content-type: application/json POST http://localhost:8011 content-type: application/json +{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getConfirmedTokens", + "params": [0, 100] +} + +### +POST http://localhost:8011 +content-type: application/json + +{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getAllAccountBalances", + "params": ["0x36615Cf349d7F6344891B1e7CA7C72883F5dc049"] +} + +### +POST http://localhost:8011 +content-type: application/json + { "jsonrpc": "2.0", "id": "1", @@ -768,3 +790,14 @@ content-type: application/json "method": "config_setLogging", "params": ["era_test_node=info,hyper=debug"] } + +### +POST http://localhost:8011 +content-type: application/json + +{ + "jsonrpc": "2.0", + "id": "1", + "method": "web3_clientVersion", + "params": [] +}