diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index cd1c1c0131f..f92820c6bdf 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -45,7 +45,7 @@ jobs: run: | npm cache clean --force # version from ethexe/contracts/lib/openzeppelin-foundry-upgrades/src/internal/Versions.sol - npx @openzeppelin/upgrades-core@^1.32.3 + npx @openzeppelin/upgrades-core@^1.37.0 cd ethexe/contracts forge fmt --check @@ -105,6 +105,7 @@ jobs: runs-on: [kuberunner, github-runner-01] env: RUSTUP_HOME: /tmp/rustup_home + RUSTFLAGS: "--cfg fuzz" steps: - name: Cancel Previous Runs if: ${{ github.event_name == 'pull_request' }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2509d9ddf19..f19d8da3d0b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -62,7 +62,8 @@ jobs: - name: "Environment: Export versions" run: | - echo "VARA_SPEC=$(cat runtime/vara/src/lib.rs | grep "spec_version: " | awk -F " " '{print substr($2, 1, length($2)-1)}')" >> $GITHUB_ENV + echo "VARA_PROD_SPEC=$(cat runtime/vara/src/lib.rs | grep "spec_version: " | head -n 1 | awk -F " " '{print substr($2, 1, length($2)-1)}')" >> $GITHUB_ENV + echo "VARA_DEV_SPEC=$(cat runtime/vara/src/lib.rs | grep "spec_version: " | tail -n 1 | awk -F " " '{print substr($2, 1, length($2)-1)}')" >> $GITHUB_ENV - name: "Environment: Make `artifact` directory" run: mkdir -p artifact @@ -80,31 +81,31 @@ jobs: - name: "Artifact: Production `vara-runtime` metadata" run: | - RUNTIME_WASM=target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm PRINT_SCALE=1 cargo run -p gsdk-api-gen --release > "artifact/production_vara_runtime_v${VARA_SPEC}_metadata.scale" + RUNTIME_WASM=target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm PRINT_SCALE=1 cargo run -p gsdk-api-gen --release > "artifact/production_vara_runtime_v${VARA_PROD_SPEC}_metadata.scale" - name: "Artifact: Production `vara-runtime`" - run: cp target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm "artifact/production_vara_runtime_v$VARA_SPEC.wasm" + run: cp target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm "artifact/production_vara_runtime_v${VARA_PROD_SPEC}.wasm" - name: "Build: Production node client and development `vara-runtime`" - run: cargo build -p gear-cli --profile production + run: cargo build -p gear-cli --profile production --features metadata-hash - name: "Test: Development `vara-runtime`" run: ./wasm-proc --check-runtime-imports --check-runtime-is-dev true target/production/wbuild/vara-runtime/vara_runtime.compact.wasm - name: "Artifact: Development `vara-runtime` metadata" run: | - RUNTIME_WASM=target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm PRINT_SCALE=1 cargo run -p gsdk-api-gen --release > "artifact/testnet_vara_runtime_v${VARA_SPEC}_metadata.scale" + RUNTIME_WASM=target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm PRINT_SCALE=1 cargo run -p gsdk-api-gen --release > "artifact/testnet_vara_runtime_v${VARA_DEV_SPEC}_metadata.scale" - name: "Artifact: Production node client and development `vara-runtime`" run: | - cp target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm "artifact/testnet_vara_runtime_v$VARA_SPEC.wasm" + cp target/production/wbuild/vara-runtime/vara_runtime.compact.compressed.wasm "artifact/testnet_vara_runtime_v${VARA_DEV_SPEC}.wasm" cp target/production/gear artifact/gear strip artifact/gear || true - name: Check SHA256 checksums run: | - sha256sum artifact/production_vara_runtime_v$VARA_SPEC.wasm - sha256sum artifact/testnet_vara_runtime_v$VARA_SPEC.wasm + sha256sum artifact/production_vara_runtime_v${VARA_PROD_SPEC}.wasm + sha256sum artifact/testnet_vara_runtime_v${VARA_DEV_SPEC}.wasm - name: Publish uses: softprops/action-gh-release@v2 diff --git a/.gitmodules b/.gitmodules index a2dd5d9bf4d..bf4ed3aba63 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,19 @@ [submodule "ethexe/contracts/lib/forge-std"] path = ethexe/contracts/lib/forge-std url = https://github.com/foundry-rs/forge-std + branch = "v1" [submodule "ethexe/contracts/lib/openzeppelin-contracts"] path = ethexe/contracts/lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts + branch = "release-v5.1" [submodule "ethexe/contracts/lib/openzeppelin-foundry-upgrades"] path = ethexe/contracts/lib/openzeppelin-foundry-upgrades url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades + branch = "main" [submodule "ethexe/contracts/lib/openzeppelin-contracts-upgradeable"] path = ethexe/contracts/lib/openzeppelin-contracts-upgradeable url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable + branch = "release-v5.1" [submodule "ethexe/contracts/lib/symbiotic-core"] path = ethexe/contracts/lib/symbiotic-core url = https://github.com/grishasobol/symbiotic-core diff --git a/Cargo.lock b/Cargo.lock index 328d0d04db8..85d242fda01 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -154,9 +154,9 @@ checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "alloy" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "056f2c01b2aed86e15b43c47d109bfc8b82553dc34e66452875e51247ec31ab2" +checksum = "689e271a72a5c0b05bfdf41c9d0424f11e9df721385dc5bd9045a51f9ea3313b" dependencies = [ "alloy-consensus", "alloy-contract", @@ -189,25 +189,41 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705687d5bfd019fee57cf9e206b27b30a9a9617535d5590a02b171e813208f8e" +checksum = "8ba14856660f31807ebb26ce8f667e814c72694e1077e97ef102e326ad580f3f" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", + "alloy-trie", "auto_impl", "c-kzg", "derive_more 1.0.0", + "k256", + "serde", +] + +[[package]] +name = "alloy-consensus-any" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28666307e76441e7af37a2b90cde7391c28112121bea59f4e0d804df8b20057e" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", "serde", ] [[package]] name = "alloy-contract" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917f7d12cf3971dc8c11c9972f732b35ccb9aaaf5f28f2f87e9e6523bee3a8ad" +checksum = "f3510769905590b8991a8e63a5e0ab4aa72cf07a13ab5fbe23f12f4454d161da" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -221,14 +237,14 @@ dependencies = [ "alloy-transport", "futures", "futures-util", - "thiserror", + "thiserror 2.0.6", ] [[package]] name = "alloy-core" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a54c7158ea4a394bef220d82d8fdd412fb9b1ca2d6024db539070b7bc01b6401" +checksum = "c618bd382f0bc2ac26a7e4bfae01c9b015ca8f21b37ca40059ae35a7e62b3dc6" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -239,9 +255,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6228abfc751a29cde117b0879b805a3e0b3b641358f063272c83ca459a56886" +checksum = "41056bde53ae10ffbbf11618efbe1e0290859e5eab0fe9ef82ebdb62f12a866f" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -267,21 +283,22 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.1.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea59dc42102bc9a1905dc57901edc6dd48b9f38115df86c7d252acba70d71d04" +checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" dependencies = [ "alloy-primitives", "alloy-rlp", + "derive_more 1.0.0", "k256", "serde", ] [[package]] name = "alloy-eips" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ffb906284a1e1f63c4607da2068c8197458a352d0b3e9796e67353d72a9be85" +checksum = "47e922d558006ba371681d484d12aa73fe673d84884f83747730af7433c0e86d" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -297,20 +314,21 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8429cf4554eed9b40feec7f4451113e76596086447550275e3def933faf47ce3" +checksum = "5dca170827a7ca156b43588faebf9e9d27c27d0fb07cab82cfd830345e2b24f5" dependencies = [ "alloy-primitives", "alloy-serde", + "alloy-trie", "serde", ] [[package]] name = "alloy-json-abi" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d46eb5871592c216d39192499c95a99f7175cb94104f88c307e6dc960676d9f1" +checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -320,29 +338,31 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fa8a1a3c4cbd221f2b8e3693aeb328fca79a757fe556ed08e47bbbc2a70db7" +checksum = "9335278f50b0273e0a187680ee742bb6b154a948adf036f448575bacc5ccb315" dependencies = [ "alloy-primitives", "alloy-sol-types", "serde", "serde_json", - "thiserror", + "thiserror 2.0.6", "tracing", ] [[package]] name = "alloy-network" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fa23a6a9d612b52e402c995f2d582c25165ec03ac6edf64c861a76bc5b87cd" +checksum = "ad4e6ad4230df8c4a254c20f8d6a84ab9df151bfca13f463177dbc96571cc1f8" dependencies = [ "alloy-consensus", + "alloy-consensus-any", "alloy-eips", "alloy-json-rpc", "alloy-network-primitives", "alloy-primitives", + "alloy-rpc-types-any", "alloy-rpc-types-eth", "alloy-serde", "alloy-signer", @@ -350,14 +370,16 @@ dependencies = [ "async-trait", "auto_impl", "futures-utils-wasm", - "thiserror", + "serde", + "serde_json", + "thiserror 2.0.6", ] [[package]] name = "alloy-network-primitives" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "801492711d4392b2ccf5fc0bc69e299fa1aab15167d74dcaa9aab96a54f684bd" +checksum = "c4df88a2f8020801e0fefce79471d3946d39ca3311802dbbd0ecfdeee5e972e3" dependencies = [ "alloy-consensus", "alloy-eips", @@ -368,9 +390,9 @@ dependencies = [ [[package]] name = "alloy-node-bindings" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1334a738aa1710cb8227441b3fcc319202ce78e967ef37406940242df4a454" +checksum = "2db5cefbc736b2b26a960dcf82279c70a03695dd11a0032a6dc27601eeb29182" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -378,16 +400,16 @@ dependencies = [ "rand", "serde_json", "tempfile", - "thiserror", + "thiserror 2.0.6", "tracing", "url", ] [[package]] name = "alloy-primitives" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f35429a652765189c1c5092870d8360ee7b7769b09b06d89ebaefd34676446" +checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430" dependencies = [ "alloy-rlp", "bytes", @@ -413,9 +435,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcfaa4ffec0af04e3555686b8aacbcdf7d13638133a0672749209069750f78a6" +checksum = "5115c74c037714e1b02a86f742289113afa5d494b5ea58308ba8aa378e739101" dependencies = [ "alloy-chains", "alloy-consensus", @@ -429,6 +451,7 @@ dependencies = [ "alloy-rpc-client", "alloy-rpc-types-anvil", "alloy-rpc-types-eth", + "alloy-signer", "alloy-signer-local", "alloy-transport", "alloy-transport-http", @@ -440,21 +463,24 @@ dependencies = [ "futures", "futures-utils-wasm", "lru", + "parking_lot 0.12.3", "pin-project", "reqwest", + "schnellru", "serde", "serde_json", - "thiserror", + "thiserror 2.0.6", "tokio", "tracing", "url", + "wasmtimer", ] [[package]] name = "alloy-pubsub" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f32cef487122ae75c91eb50154c70801d71fabdb976fec6c49e0af5e6486ab15" +checksum = "b073afa409698d1b9a30522565815f3bf7010e5b47b997cf399209e6110df097" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -471,9 +497,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.5" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" +checksum = "f542548a609dca89fcd72b3b9f355928cf844d4363c5eed9c5273a3dd225e097" dependencies = [ "alloy-rlp-derive", "arrayvec 0.7.4", @@ -482,20 +508,20 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.5" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" +checksum = "5a833d97bf8a5f0f878daf2c8451fff7de7f9de38baa5a45d936ec718d81255a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] name = "alloy-rpc-client" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370143ed581aace6e663342d21d209c6b2e34ee6142f7d6675adb518deeaf0dc" +checksum = "5c6a0bd0ce5660ac48e4f3bb0c7c5c3a94db287a0be94971599d83928476cbcd" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -513,13 +539,14 @@ dependencies = [ "tower 0.5.1", "tracing", "url", + "wasmtimer", ] [[package]] name = "alloy-rpc-types" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ffc534b7919e18f35e3aa1f507b6f3d9d92ec298463a9f6beaac112809d8d06" +checksum = "374ac12e35bb90ebccd86e7c943ddba9590149a6e35cc4d9cd860d6635fd1018" dependencies = [ "alloy-primitives", "alloy-rpc-types-anvil", @@ -532,34 +559,47 @@ dependencies = [ [[package]] name = "alloy-rpc-types-anvil" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d780adaa5d95b07ad92006b2feb68ecfa7e2015f7d5976ceaac4c906c73ebd07" +checksum = "f0b85a5f5f5d99047544f4ec31330ee15121dcb8ef5af3e791a5207e6b92b05b" dependencies = [ "alloy-primitives", + "alloy-rpc-types-eth", "alloy-serde", "serde", ] +[[package]] +name = "alloy-rpc-types-any" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea98f81bcd759dbfa3601565f9d7a02220d8ef1d294ec955948b90aaafbfd857" +dependencies = [ + "alloy-consensus-any", + "alloy-rpc-types-eth", + "alloy-serde", +] + [[package]] name = "alloy-rpc-types-beacon" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8dc5980fe30203d698627cddb5f0cedc57f900c8b5e1229c8b9448e37acb4a" +checksum = "6e13e94be8f6f5cb735e604f9db436430bf3773fdd41db7221edaa58c07c4c8a" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rpc-types-engine", + "alloy-serde", "serde", "serde_with", - "thiserror", + "thiserror 2.0.6", ] [[package]] name = "alloy-rpc-types-engine" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0285c4c09f838ab830048b780d7f4a4f460f309aa1194bb049843309524c64c" +checksum = "9ca5898f753ff0d15a0dc955c169523d8fee57e05bb5a38a398b3451b0b988be" dependencies = [ "alloy-consensus", "alloy-eips", @@ -573,11 +613,12 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413f4aa3ccf2c3e4234a047c5fa4727916d7daf25a89f9b765df0ba09784fd87" +checksum = "0e518b0a7771e00728f18be0708f828b18a1cfc542a7153bef630966a26388e0" dependencies = [ "alloy-consensus", + "alloy-consensus-any", "alloy-eips", "alloy-network-primitives", "alloy-primitives", @@ -592,9 +633,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dff0ab1cdd43ca001e324dc27ee0e8606bd2161d6623c63e0e0b8c4dfc13600" +checksum = "ed3dc8d4a08ffc90c1381d39a4afa2227668259a42c97ab6eecf51cbd82a8761" dependencies = [ "alloy-primitives", "serde", @@ -603,23 +644,23 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd4e0ad79c81a27ca659be5d176ca12399141659fef2bcbfdc848da478f4504" +checksum = "16188684100f6e0f2a2b949968fe3007749c5be431549064a1bce4e7b3a196a9" dependencies = [ "alloy-primitives", "async-trait", "auto_impl", "elliptic-curve", "k256", - "thiserror", + "thiserror 2.0.6", ] [[package]] name = "alloy-signer-local" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494e0a256f3e99f2426f994bcd1be312c02cb8f88260088dacb33a8b8936475f" +checksum = "e2184dab8c9493ab3e1c9f6bd3bdb563ed322b79023d81531935e84a4fdf7cf1" dependencies = [ "alloy-consensus", "alloy-network", @@ -628,28 +669,28 @@ dependencies = [ "async-trait", "k256", "rand", - "thiserror", + "thiserror 2.0.6", ] [[package]] name = "alloy-sol-macro" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2395336745358cc47207442127c47c63801a7065ecc0aa928da844f8bb5576" +checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed5047c9a241df94327879c2b0729155b58b941eae7805a7ada2e19436e6b39" +checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -659,16 +700,16 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dee02a81f529c415082235129f0df8b8e60aa1601b9c9298ffe54d75f57210b" +checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee" dependencies = [ "alloy-json-abi", "const-hex", @@ -677,15 +718,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.71", + "syn 2.0.90", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f631f0bd9a9d79619b27c91b6b1ab2c4ef4e606a65192369a1ee05d40dcf81cc" +checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73" dependencies = [ "serde", "winnow 0.6.6", @@ -693,9 +734,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2841af22d99e2c0f82a78fe107b6481be3dd20b89bfb067290092794734343a" +checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -706,9 +747,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3e97dad3d31770db0fc89bd6a63b789fbae78963086733f960cf32c483904" +checksum = "628be5b9b75e4f4c4f2a71d985bbaca4f23de356dc83f1625454c505f5eef4df" dependencies = [ "alloy-json-rpc", "base64 0.22.1", @@ -716,18 +757,19 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror", + "thiserror 2.0.6", "tokio", "tower 0.5.1", "tracing", "url", + "wasmtimer", ] [[package]] name = "alloy-transport-http" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b367dcccada5b28987c2296717ee04b9a5637aacd78eacb1726ef211678b5212" +checksum = "4e24412cf72f79c95cd9b1d9482e3a31f9d94c24b43c4b3b710cc8d4341eaab0" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -740,9 +782,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7153b88690de6a50bba81c11e1d706bc41dbb90126d607404d60b763f6a3947f" +checksum = "1ca46272d17f9647fdb56080ed26c72b3ea5078416831130f5ed46f3b4be0ed6" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -756,6 +798,22 @@ dependencies = [ "ws_stream_wasm", ] +[[package]] +name = "alloy-trie" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a5fd8fea044cc9a8c8a50bb6f28e31f0385d820f116c5b98f6f4e55d6e5590b" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "arrayvec 0.7.4", + "derive_more 1.0.0", + "nybbles", + "serde", + "smallvec", + "tracing", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -854,7 +912,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -1211,6 +1269,9 @@ name = "arrayvec" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +dependencies = [ + "serde", +] [[package]] name = "asn1-rs" @@ -1224,7 +1285,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.62", "time", ] @@ -1240,7 +1301,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.62", "time", ] @@ -1264,7 +1325,7 @@ checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", "synstructure 0.13.1", ] @@ -1287,7 +1348,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -1448,7 +1509,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -1488,7 +1549,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -1505,7 +1566,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -1565,7 +1626,7 @@ checksum = "99e1aca718ea7b89985790c94aad72d77533063fe00bc497bb79a7c2dae6a661" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -1598,7 +1659,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -1715,7 +1776,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -2160,7 +2221,7 @@ dependencies = [ "semver 1.0.18", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -2174,7 +2235,7 @@ dependencies = [ "semver 1.0.18", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -2443,7 +2504,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -2574,9 +2635,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.12.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if", "cpufeatures", @@ -3014,7 +3075,7 @@ checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3041,7 +3102,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3058,7 +3119,7 @@ checksum = "50c49547d73ba8dcfd4ad7325d64c6d5391ff4224d498fc39a6f3f49825a530d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3106,7 +3167,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3128,7 +3189,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3861,7 +3922,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", - "serde", ] [[package]] @@ -3883,7 +3943,7 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3894,7 +3954,7 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3905,7 +3965,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3949,7 +4009,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -3969,7 +4029,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", "unicode-xid", ] @@ -4085,7 +4145,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -4115,7 +4175,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.71", + "syn 2.0.90", "termcolor", "toml 0.8.14", "walkdir", @@ -4315,7 +4375,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -4355,7 +4415,7 @@ checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -4396,7 +4456,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -4417,7 +4477,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -4638,7 +4698,7 @@ dependencies = [ "hyper 0.14.31", "log", "prometheus", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -4664,6 +4724,7 @@ dependencies = [ "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "tokio", "tower 0.4.13", + "tower-http", ] [[package]] @@ -4835,7 +4896,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -4904,7 +4965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" dependencies = [ "libc", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -5065,7 +5126,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" dependencies = [ "nonempty 0.7.0", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -5144,7 +5205,7 @@ dependencies = [ "sp-storage 21.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-trie 37.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-wasm-interface 21.0.1 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "thousands", ] @@ -5156,7 +5217,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -5311,7 +5372,7 @@ dependencies = [ "proc-macro2", "quote", "sp-crypto-hashing 0.1.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -5323,7 +5384,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -5333,7 +5394,7 @@ source = "git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -5577,7 +5638,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -5741,7 +5802,7 @@ dependencies = [ "reqwest", "scale-info", "serde", - "thiserror", + "thiserror 1.0.62", "tokio", "toml 0.8.14", "url", @@ -5793,7 +5854,7 @@ dependencies = [ "log", "parity-scale-codec", "subxt", - "thiserror", + "thiserror 1.0.62", "tokio", "url", "wabt", @@ -5882,7 +5943,7 @@ dependencies = [ "hex", "log", "rand", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -5949,7 +6010,7 @@ name = "gear-common-codegen" version = "1.7.0" dependencies = [ "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -6127,7 +6188,7 @@ dependencies = [ "rand", "reqwest", "subxt", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", "tracing-appender", @@ -6325,7 +6386,7 @@ dependencies = [ "sp-allocator", "sp-wasm-interface-common", "tempfile", - "thiserror", + "thiserror 1.0.62", "wasmer", "wasmer-types", "wasmi 0.38.0", @@ -6467,7 +6528,7 @@ dependencies = [ "parity-scale-codec", "sp-consensus-babe", "subxt", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -6496,7 +6557,7 @@ dependencies = [ "pathdiff", "regex", "rustc_version 0.4.0", - "thiserror", + "thiserror 1.0.62", "toml 0.8.14", "wabt", ] @@ -6521,7 +6582,7 @@ dependencies = [ "nonempty 0.8.1", "proptest", "rand", - "thiserror", + "thiserror 1.0.62", "wasm-smith", "wasmparser-nostd", "wasmprinter", @@ -6589,7 +6650,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.71", + "syn 2.0.90", "tabled", "vara-runtime", ] @@ -6777,7 +6838,7 @@ dependencies = [ "proc-macro2", "quote", "scale-info", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -6876,7 +6937,7 @@ dependencies = [ "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "subxt", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -6898,7 +6959,7 @@ dependencies = [ "scale-info", "sp-io 38.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "subxt-codegen", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -6907,7 +6968,7 @@ version = "1.7.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -6937,7 +6998,7 @@ dependencies = [ "gstd", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", "trybuild", ] @@ -7042,7 +7103,7 @@ dependencies = [ "pest_derive", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -7108,16 +7169,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "hdrhistogram" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" -dependencies = [ - "byteorder", - "num-traits", -] - [[package]] name = "headers" version = "0.3.9" @@ -7232,7 +7283,7 @@ dependencies = [ "once_cell", "rand", "socket2 0.5.7", - "thiserror", + "thiserror 1.0.62", "tinyvec", "tokio", "tracing", @@ -7255,7 +7306,7 @@ dependencies = [ "rand", "resolv-conf", "smallvec", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", ] @@ -7883,7 +7934,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.62", "walkdir", ] @@ -7963,7 +8014,7 @@ dependencies = [ "rustls-native-certs 0.7.2", "rustls-pki-types", "soketto 0.7.1", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-rustls 0.25.0", "tokio-util", @@ -7986,7 +8037,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "soketto 0.8.0", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-rustls 0.26.0", "tokio-util", @@ -8009,7 +8060,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "soketto 0.8.0", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-rustls 0.26.0", "tokio-util", @@ -8034,7 +8085,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", "tracing", @@ -8056,7 +8107,7 @@ dependencies = [ "rustc-hash 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", "tracing", @@ -8082,7 +8133,7 @@ dependencies = [ "rustc-hash 2.0.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", "tracing", @@ -8101,7 +8152,7 @@ dependencies = [ "jsonrpsee-types 0.22.5", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", "tokio", "tower 0.4.13", "tracing", @@ -8126,7 +8177,7 @@ dependencies = [ "rustls-platform-verifier", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", "tokio", "tower 0.4.13", "tracing", @@ -8143,7 +8194,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -8165,7 +8216,7 @@ dependencies = [ "serde", "serde_json", "soketto 0.8.0", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", "tokio-util", @@ -8183,7 +8234,7 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -8196,7 +8247,7 @@ dependencies = [ "http 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -8208,7 +8259,7 @@ dependencies = [ "http 1.1.0", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -8475,7 +8526,7 @@ dependencies = [ "multiaddr 0.18.1", "pin-project", "rw-stream-sink 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -8510,7 +8561,7 @@ dependencies = [ "multiaddr 0.18.1", "pin-project", "rw-stream-sink 0.4.0 (git+https://github.com/gear-tech/rust-libp2p?branch=al/v0.54.1-patches)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -8582,7 +8633,7 @@ dependencies = [ "rand", "rw-stream-sink 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec", - "thiserror", + "thiserror 1.0.62", "unsigned-varint 0.7.2", "void", ] @@ -8607,7 +8658,7 @@ dependencies = [ "rand", "rw-stream-sink 0.4.0 (git+https://github.com/gear-tech/rust-libp2p?branch=al/v0.54.1-patches)", "smallvec", - "thiserror", + "thiserror 1.0.62", "tracing", "unsigned-varint 0.8.0", "void", @@ -8694,7 +8745,7 @@ dependencies = [ "quick-protobuf", "quick-protobuf-codec 0.2.0", "smallvec", - "thiserror", + "thiserror 1.0.62", "void", ] @@ -8715,7 +8766,7 @@ dependencies = [ "quick-protobuf", "quick-protobuf-codec 0.3.1", "smallvec", - "thiserror", + "thiserror 1.0.62", "tracing", "void", ] @@ -8735,7 +8786,7 @@ dependencies = [ "quick-protobuf", "rand", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.62", "tracing", "zeroize", ] @@ -8763,7 +8814,7 @@ dependencies = [ "rand", "sha2 0.10.8", "smallvec", - "thiserror", + "thiserror 1.0.62", "uint", "unsigned-varint 0.7.2", "void", @@ -8790,7 +8841,7 @@ dependencies = [ "rand", "sha2 0.10.8", "smallvec", - "thiserror", + "thiserror 1.0.62", "tracing", "uint", "void", @@ -8893,7 +8944,7 @@ dependencies = [ "sha2 0.10.8", "snow", "static_assertions", - "thiserror", + "thiserror 1.0.62", "x25519-dalek", "zeroize", ] @@ -8968,7 +9019,7 @@ dependencies = [ "ring 0.16.20", "rustls 0.21.7", "socket2 0.5.7", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -8990,7 +9041,7 @@ dependencies = [ "ring 0.17.8", "rustls 0.23.10", "socket2 0.5.7", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", ] @@ -9088,7 +9139,7 @@ dependencies = [ "proc-macro-warning 0.4.2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -9099,7 +9150,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -9167,7 +9218,7 @@ dependencies = [ "ring 0.16.20", "rustls 0.21.7", "rustls-webpki 0.101.4", - "thiserror", + "thiserror 1.0.62", "x509-parser 0.15.1", "yasna", ] @@ -9185,7 +9236,7 @@ dependencies = [ "ring 0.17.8", "rustls 0.23.10", "rustls-webpki 0.101.4", - "thiserror", + "thiserror 1.0.62", "x509-parser 0.16.0", "yasna", ] @@ -9251,7 +9302,7 @@ dependencies = [ "pin-project-lite", "rw-stream-sink 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "soketto 0.8.0", - "thiserror", + "thiserror 1.0.62", "url", "webpki-roots 0.25.2", ] @@ -9265,7 +9316,7 @@ dependencies = [ "futures", "libp2p-core 0.40.1", "log", - "thiserror", + "thiserror 1.0.62", "yamux 0.12.1", ] @@ -9277,7 +9328,7 @@ dependencies = [ "either", "futures", "libp2p-core 0.42.0", - "thiserror", + "thiserror 1.0.62", "tracing", "yamux 0.12.1", "yamux 0.13.3", @@ -9473,7 +9524,7 @@ dependencies = [ "socket2 0.5.7", "static_assertions", "str0m", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", "tokio-tungstenite 0.20.1", @@ -9590,7 +9641,7 @@ dependencies = [ "macro_magic_core", "macro_magic_macros", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -9604,7 +9655,7 @@ dependencies = [ "macro_magic_core_macros", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -9615,7 +9666,7 @@ checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -9626,7 +9677,7 @@ checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ "macro_magic_core", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -9857,7 +9908,7 @@ dependencies = [ "rand_chacha", "rand_distr", "subtle 2.6.1", - "thiserror", + "thiserror 1.0.62", "zeroize", ] @@ -9912,7 +9963,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -10175,7 +10226,7 @@ dependencies = [ "anyhow", "byteorder", "paste", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -10189,7 +10240,7 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -10214,7 +10265,7 @@ checksum = "a4a43439bf756eed340bdf8feba761e2d50c7d47175d87545cd5cbe4a137c4d1" dependencies = [ "cc", "libc", - "thiserror", + "thiserror 1.0.62", "winapi", ] @@ -10485,7 +10536,7 @@ checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -10496,7 +10547,7 @@ checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -10518,6 +10569,19 @@ dependencies = [ "scale-info", ] +[[package]] +name = "nybbles" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95f06be0417d97f81fe4e5c86d7d01b392655a9cac9c19a848aa033e18937b23" +dependencies = [ + "alloy-rlp", + "const-hex", + "proptest", + "serde", + "smallvec", +] + [[package]] name = "object" version = "0.30.4" @@ -10598,7 +10662,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -11224,7 +11288,7 @@ version = "1.7.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12001,7 +12065,7 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a" dependencies = [ - "thiserror", + "thiserror 1.0.62", "ucd-trie", ] @@ -12025,7 +12089,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12076,7 +12140,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12167,7 +12231,7 @@ dependencies = [ "polkavm-common", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12177,7 +12241,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" dependencies = [ "polkavm-derive-impl", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12362,7 +12426,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12393,7 +12457,7 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "thiserror", + "thiserror 1.0.62", "toml 0.5.11", ] @@ -12449,7 +12513,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12460,7 +12524,7 @@ checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12471,14 +12535,14 @@ checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -12494,7 +12558,7 @@ dependencies = [ "lazy_static", "memchr", "parking_lot 0.12.3", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -12529,7 +12593,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12611,7 +12675,7 @@ dependencies = [ "prost 0.12.6", "prost-types 0.12.6", "regex", - "syn 2.0.71", + "syn 2.0.90", "tempfile", ] @@ -12638,7 +12702,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -12738,7 +12802,7 @@ dependencies = [ "asynchronous-codec 0.6.2", "bytes", "quick-protobuf", - "thiserror", + "thiserror 1.0.62", "unsigned-varint 0.7.2", ] @@ -12750,7 +12814,7 @@ dependencies = [ "asynchronous-codec 0.7.0", "bytes", "quick-protobuf", - "thiserror", + "thiserror 1.0.62", "unsigned-varint 0.8.0", ] @@ -12776,7 +12840,7 @@ dependencies = [ "quinn-udp 0.3.2", "rustc-hash 1.1.0", "rustls 0.20.8", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", "webpki", @@ -12795,7 +12859,7 @@ dependencies = [ "quinn-udp 0.4.1", "rustc-hash 1.1.0", "rustls 0.21.7", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", ] @@ -12813,7 +12877,7 @@ dependencies = [ "quinn-udp 0.5.2", "rustc-hash 1.1.0", "rustls 0.23.10", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", ] @@ -12830,7 +12894,7 @@ dependencies = [ "rustc-hash 1.1.0", "rustls 0.20.8", "slab", - "thiserror", + "thiserror 1.0.62", "tinyvec", "tracing", "webpki", @@ -12848,7 +12912,7 @@ dependencies = [ "rustc-hash 1.1.0", "rustls 0.21.7", "slab", - "thiserror", + "thiserror 1.0.62", "tinyvec", "tracing", ] @@ -12865,7 +12929,7 @@ dependencies = [ "rustc-hash 1.1.0", "rustls 0.23.10", "slab", - "thiserror", + "thiserror 1.0.62", "tinyvec", "tracing", ] @@ -13053,7 +13117,7 @@ dependencies = [ "futures", "jsonrpsee 0.23.2", "serde_json", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", ] @@ -13093,7 +13157,7 @@ checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", "redox_syscall 0.2.16", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -13113,7 +13177,7 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -13394,7 +13458,7 @@ dependencies = [ "netlink-packet-route", "netlink-proto", "nix 0.24.3", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -13810,7 +13874,7 @@ dependencies = [ "log", "sp-core 34.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-wasm-interface 21.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -13840,7 +13904,7 @@ dependencies = [ "sp-keystore 0.40.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -13893,7 +13957,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -13933,7 +13997,7 @@ dependencies = [ "sp-panic-handler 13.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "sp-version 37.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -14011,7 +14075,7 @@ dependencies = [ "sp-runtime 39.0.1", "sp-state-machine 0.43.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14047,7 +14111,7 @@ dependencies = [ "sp-keystore 0.40.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14069,7 +14133,7 @@ dependencies = [ "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-keystore 0.40.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14126,7 +14190,7 @@ dependencies = [ "sp-keystore 0.40.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14146,7 +14210,7 @@ dependencies = [ "sp-blockchain", "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14230,7 +14294,7 @@ dependencies = [ "sc-allocator", "sp-maybe-compressed-blob 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-wasm-interface 21.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", "wasm-instrument", ] @@ -14243,7 +14307,7 @@ dependencies = [ "sp-allocator", "sp-maybe-compressed-blob 11.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-wasm-interface 21.0.1 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "wasm-instrument", ] @@ -14335,7 +14399,7 @@ dependencies = [ "sp-application-crypto 38.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-keystore 0.40.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14364,7 +14428,7 @@ dependencies = [ "sp-keystore 0.40.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-mixnet", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14409,7 +14473,7 @@ dependencies = [ "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", "unsigned-varint 0.7.2", @@ -14473,7 +14537,7 @@ dependencies = [ "sp-blockchain", "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14508,7 +14572,7 @@ dependencies = [ "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", ] @@ -14545,7 +14609,7 @@ dependencies = [ "multiaddr 0.18.1", "multihash 0.19.1", "rand", - "thiserror", + "thiserror 1.0.62", "zeroize", ] @@ -14641,7 +14705,7 @@ dependencies = [ "sp-rpc", "sp-runtime 39.0.1", "sp-version 37.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14695,7 +14759,7 @@ dependencies = [ "sp-rpc", "sp-runtime 39.0.1", "sp-version 37.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", ] @@ -14758,7 +14822,7 @@ dependencies = [ "static_init", "substrate-prometheus-endpoint", "tempfile", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", "tracing-futures", @@ -14791,7 +14855,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14831,7 +14895,7 @@ dependencies = [ "sc-utils", "serde", "serde_json", - "thiserror", + "thiserror 1.0.62", "wasm-timer", ] @@ -14858,7 +14922,7 @@ dependencies = [ "sp-rpc", "sp-runtime 39.0.1", "sp-tracing 17.0.1 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "tracing", "tracing-log", "tracing-subscriber", @@ -14872,7 +14936,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -14899,7 +14963,7 @@ dependencies = [ "sp-tracing 17.0.1 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-transaction-pool", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -14915,7 +14979,7 @@ dependencies = [ "sp-blockchain", "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -15045,8 +15109,8 @@ dependencies = [ "proc-macro2", "quote", "scale-info", - "syn 2.0.71", - "thiserror", + "syn 2.0.90", + "thiserror 1.0.62", ] [[package]] @@ -15101,7 +15165,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -15174,7 +15238,7 @@ dependencies = [ "log", "rand", "slab", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -15390,7 +15454,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -15401,7 +15465,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -15424,7 +15488,7 @@ checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -15457,8 +15521,6 @@ dependencies = [ "base64 0.22.1", "chrono", "hex", - "indexmap 1.9.3", - "indexmap 2.6.0", "serde", "serde_derive", "serde_json", @@ -15475,7 +15537,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -15700,6 +15762,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "smol" @@ -15891,7 +15956,7 @@ dependencies = [ "log", "parity-scale-codec", "sp-wasm-interface-common", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -15914,7 +15979,7 @@ dependencies = [ "sp-state-machine 0.43.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-trie 37.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-version 37.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -15936,7 +16001,7 @@ dependencies = [ "sp-state-machine 0.43.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-trie 37.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-version 37.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -15951,7 +16016,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -15965,7 +16030,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16060,7 +16125,7 @@ dependencies = [ "sp-database", "sp-runtime 39.0.1", "sp-state-machine 0.43.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "tracing", ] @@ -16076,7 +16141,7 @@ dependencies = [ "sp-inherents", "sp-runtime 39.0.1", "sp-state-machine 0.43.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -16166,7 +16231,7 @@ dependencies = [ "sp-storage 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "ss58-registry", "substrate-bip39 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", "tracing", "w3f-bls", "zeroize", @@ -16212,7 +16277,7 @@ dependencies = [ "sp-storage 21.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "ss58-registry", "substrate-bip39 0.6.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "tracing", "w3f-bls", "zeroize", @@ -16273,7 +16338,7 @@ checksum = "b85d0f1f1e44bd8617eb2a48203ee854981229e3e79e6f468c7175d5fd37489b" dependencies = [ "quote", "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16283,7 +16348,7 @@ source = "git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot dependencies = [ "quote", "sp-crypto-hashing 0.1.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16303,7 +16368,7 @@ checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16313,7 +16378,7 @@ source = "git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16359,7 +16424,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -16454,7 +16519,7 @@ version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0c768c11afbe698a090386876911da4236af199cd38a5866748df4d8628aeff" dependencies = [ - "thiserror", + "thiserror 1.0.62", "zstd 0.12.4", ] @@ -16463,7 +16528,7 @@ name = "sp-maybe-compressed-blob" version = "11.0.0" source = "git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409#2686925248a9b8b6a45c10014db48b35671d473b" dependencies = [ - "thiserror", + "thiserror 1.0.62", "zstd 0.12.4", ] @@ -16656,7 +16721,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16669,7 +16734,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16715,7 +16780,7 @@ dependencies = [ "sp-externalities 0.29.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-panic-handler 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-trie 37.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", "tracing", "trie-db", ] @@ -16735,7 +16800,7 @@ dependencies = [ "sp-externalities 0.29.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-panic-handler 13.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-trie 37.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "tracing", "trie-db", ] @@ -16760,7 +16825,7 @@ dependencies = [ "sp-externalities 0.29.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-runtime 39.0.1", "sp-runtime-interface 28.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "x25519-dalek", ] @@ -16809,7 +16874,7 @@ dependencies = [ "parity-scale-codec", "sp-inherents", "sp-runtime 39.0.1", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -16876,7 +16941,7 @@ dependencies = [ "schnellru", "sp-core 34.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-externalities 0.29.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", "tracing", "trie-db", "trie-root", @@ -16899,7 +16964,7 @@ dependencies = [ "schnellru", "sp-core 34.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-externalities 0.29.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", "tracing", "trie-db", "trie-root", @@ -16920,7 +16985,7 @@ dependencies = [ "sp-runtime 39.0.2", "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sp-version-proc-macro 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -16937,7 +17002,7 @@ dependencies = [ "sp-runtime 39.0.1", "sp-std 14.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", "sp-version-proc-macro 14.0.0 (git+https://github.com/gear-tech/polkadot-sdk.git?branch=gear-polkadot-stable2409)", - "thiserror", + "thiserror 1.0.62", ] [[package]] @@ -16949,7 +17014,7 @@ dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -16960,7 +17025,7 @@ dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -17160,7 +17225,7 @@ dependencies = [ "sctp-proto", "serde", "sha-1 0.10.1", - "thiserror", + "thiserror 1.0.62", "tracing", ] @@ -17264,7 +17329,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -17277,7 +17342,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -17340,7 +17405,7 @@ dependencies = [ "hyper-util", "log", "prometheus", - "thiserror", + "thiserror 1.0.62", "tokio", ] @@ -17473,7 +17538,7 @@ dependencies = [ "subxt-lightclient", "subxt-macro", "subxt-metadata", - "thiserror", + "thiserror 1.0.62", "tokio-util", "tracing", "url", @@ -17495,8 +17560,8 @@ dependencies = [ "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.71", - "thiserror", + "syn 2.0.90", + "thiserror 1.0.62", "tokio", ] @@ -17538,7 +17603,7 @@ dependencies = [ "serde", "serde_json", "smoldot-light", - "thiserror", + "thiserror 1.0.62", "tokio", "tokio-stream", "tracing", @@ -17556,7 +17621,7 @@ dependencies = [ "quote", "scale-typegen", "subxt-codegen", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -17585,9 +17650,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.71" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -17596,14 +17661,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebfc1bfd06acc78f16d8fd3ef846bc222ee7002468d10a7dce8d703d6eab89a3" +checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -17641,7 +17706,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -17780,7 +17845,16 @@ version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.62", +] + +[[package]] +name = "thiserror" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec2a1820ebd077e2b90c4df007bebf344cd394098a13c563957d0afc83ea47" +dependencies = [ + "thiserror-impl 2.0.6", ] [[package]] @@ -17791,7 +17865,18 @@ checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65750cab40f4ff1929fb1ba509e9914eb756131cef4210da8d5d700d26f6312" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] @@ -17911,7 +17996,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -18124,14 +18209,9 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "hdrhistogram", - "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", - "slab", "tokio", - "tokio-util", "tower-layer", "tower-service", "tracing", @@ -18198,7 +18278,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" dependencies = [ "crossbeam-channel", - "thiserror", + "thiserror 1.0.62", "time", "tracing-subscriber", ] @@ -18211,7 +18291,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -18328,7 +18408,7 @@ dependencies = [ "rand", "smallvec", "socket2 0.4.9", - "thiserror", + "thiserror 1.0.62", "tinyvec", "tokio", "tracing", @@ -18353,7 +18433,7 @@ dependencies = [ "once_cell", "rand", "smallvec", - "thiserror", + "thiserror 1.0.62", "tinyvec", "tokio", "tracing", @@ -18375,7 +18455,7 @@ dependencies = [ "rand", "resolv-conf", "smallvec", - "thiserror", + "thiserror 1.0.62", "tokio", "tracing", "trust-dns-proto 0.23.2", @@ -18423,7 +18503,7 @@ dependencies = [ "rand", "rustls 0.21.7", "sha1", - "thiserror", + "thiserror 1.0.62", "url", "utf-8", ] @@ -18444,7 +18524,7 @@ dependencies = [ "rustls 0.23.10", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.62", "utf-8", ] @@ -18789,7 +18869,7 @@ dependencies = [ "rand_core", "sha2 0.10.8", "sha3", - "thiserror", + "thiserror 1.0.62", "zeroize", ] @@ -18908,7 +18988,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", "wasm-bindgen-shared", ] @@ -18942,7 +19022,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -18998,7 +19078,7 @@ dependencies = [ "strum 0.24.1", "strum_macros 0.24.3", "tempfile", - "thiserror", + "thiserror 1.0.62", "wasm-opt-cxx-sys", "wasm-opt-sys", ] @@ -19083,7 +19163,7 @@ dependencies = [ "serde-wasm-bindgen", "shared-buffer", "target-lexicon", - "thiserror", + "thiserror 1.0.62", "tracing", "wasm-bindgen", "wasmer-compiler", @@ -19102,7 +19182,7 @@ checksum = "79fd0889f8844b7c70b8ee8fbf1d1f6ccff99399c6f3d3627048cde04b1ac493" dependencies = [ "blake3", "hex", - "thiserror", + "thiserror 1.0.62", "wasmer", ] @@ -19127,7 +19207,7 @@ dependencies = [ "self_cell", "shared-buffer", "smallvec", - "thiserror", + "thiserror 1.0.62", "wasmer-types", "wasmer-vm", "wasmparser 0.121.2", @@ -19171,7 +19251,7 @@ dependencies = [ "serde_cbor", "serde_json", "serde_yaml", - "thiserror", + "thiserror 1.0.62", "toml 0.8.14", "url", ] @@ -19204,7 +19284,7 @@ dependencies = [ "rkyv", "sha2 0.10.8", "target-lexicon", - "thiserror", + "thiserror 1.0.62", "webc", "xxhash-rust", ] @@ -19232,7 +19312,7 @@ dependencies = [ "more-asserts", "region", "scopeguard", - "thiserror", + "thiserror 1.0.62", "wasmer-types", "winapi", ] @@ -19504,7 +19584,7 @@ dependencies = [ "log", "object 0.30.4", "target-lexicon", - "thiserror", + "thiserror 1.0.62", "wasmparser 0.102.0", "wasmtime-cranelift-shared", "wasmtime-environ", @@ -19539,7 +19619,7 @@ dependencies = [ "object 0.30.4", "serde", "target-lexicon", - "thiserror", + "thiserror 1.0.62", "wasmparser 0.102.0", "wasmtime-types", ] @@ -19637,7 +19717,7 @@ checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ "cranelift-entity", "serde", - "thiserror", + "thiserror 1.0.62", "wasmparser 0.102.0", ] @@ -19652,6 +19732,20 @@ dependencies = [ "wit-parser", ] +[[package]] +name = "wasmtimer" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0048ad49a55b9deb3953841fa1fc5858f0efbcb7a18868c899a360269fac1b23" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.12.3", + "pin-utils", + "slab", + "wasm-bindgen", +] + [[package]] name = "wast" version = "64.0.0" @@ -19716,7 +19810,7 @@ dependencies = [ "shared-buffer", "tar", "tempfile", - "thiserror", + "thiserror 1.0.62", "toml 0.7.8", "url", "wasmer-config", @@ -19876,7 +19970,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -19887,7 +19981,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -20248,7 +20342,7 @@ dependencies = [ "pharos", "rustc_version 0.4.0", "send_wrapper", - "thiserror", + "thiserror 1.0.62", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -20288,7 +20382,7 @@ dependencies = [ "nom", "oid-registry 0.6.1", "rusticata-macros", - "thiserror", + "thiserror 1.0.62", "time", ] @@ -20305,7 +20399,7 @@ dependencies = [ "nom", "oid-registry 0.7.0", "rusticata-macros", - "thiserror", + "thiserror 1.0.62", "time", ] @@ -20445,7 +20539,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] @@ -20465,7 +20559,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.90", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b98ed996c38..ab1b1240743 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,7 +113,7 @@ members = [ ] [workspace.dependencies] -alloy = "0.4.2" +alloy = "0.8.0" anyhow = { version = "1.0.86", default-features = false } arbitrary = "1.3.2" async-recursion = "1.1.1" @@ -526,11 +526,14 @@ page_size = { version = "0.6", default-features = false } # pallets/gear pathdiff = { version = "0.2.1", default-features = false } # utils/wasm-builder rand_pcg = "0.3.1" # pallets/gear rustc_version = "0.4.0" # utils/wasm-builder -schnorrkel = "0.11.4" # gcli +schnorrkel = "0.11.4" # gcli scopeguard = { version = "1.2.0", default-features = false } # pallets/gear +hyper = "1.4.1" # ethexe/rpc tabled = "0.10.0" # utils/regression-analysis thousands = "0.2.0" # utils/regression-analysis toml = "0.8.14" # utils/wasm-builder +tower = "0.4.13" # ethexe/rpc +tower-http = "0.5.2" # ethexe/rpc tracing = "0.1.40" # utils/node-loader tracing-appender = "0.2" # utils/node-loader tracing-subscriber = "0.3.18" # utils/node-loader @@ -552,6 +555,9 @@ fs4 = "0.11.1" # utils/gear-wasmer bytes = "1.8.0" # utils/gear-wasmer-cache loom = "0.7.2" # utils/gear-wasmer-cache +[workspace.lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)', 'cfg(fuzz)'] } + [profile.dev.package.corosensei] opt-level = 3 diff --git a/Makefile b/Makefile index 4a9cbb907ed..cad8f050225 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ ethexe-pre-commit: ethexe-contracts-pre-commit ethexe-pre-commit-no-contracts ethexe-pre-commit-no-contracts: @ echo " > Formatting ethexe" && cargo +nightly fmt --all -- --config imports_granularity=Crate,edition=2021 @ echo " >> Clippy checking ethexe" && cargo clippy -p "ethexe-*" --all-targets --all-features -- --no-deps -D warnings - @ echo " >>> Testing ethexe" && cargo test -p "ethexe-*" + @ echo " >>> Testing ethexe" && cargo nextest run -p "ethexe-*" # Building ethexe contracts .PHONY: ethexe-contracts-pre-commit diff --git a/common/Cargo.toml b/common/Cargo.toml index 7c3c5e7bab6..346ffb125dc 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -12,12 +12,14 @@ homepage.workspace = true repository.workspace = true rust-version.workspace = true +[lints] +workspace = true + [dependencies] primitive-types = { workspace = true, features = ["scale-info"] } log.workspace = true derive_more.workspace = true enum-iterator.workspace = true -fail = { workspace = true, features = [ "failpoints" ], optional = true } # Internal deps gear-core.workspace = true @@ -35,6 +37,9 @@ frame-support.workspace = true frame-system = { workspace = true, optional = true } frame-benchmarking = { workspace = true, optional = true } +[target.'cfg(fuzz)'.dependencies] +fail = { workspace = true, features = [ "failpoints" ] } + [dev-dependencies] hex-literal.workspace = true proptest.workspace = true @@ -59,4 +64,3 @@ runtime-benchmarks = [ "frame-support/runtime-benchmarks", "gear-wasm-instrument", ] -fuzz = ["fail"] diff --git a/common/numerated/src/tree.rs b/common/numerated/src/tree.rs index 05fa6e52b1a..67a2b4f3f29 100644 --- a/common/numerated/src/tree.rs +++ b/common/numerated/src/tree.rs @@ -391,7 +391,7 @@ impl IntervalsTree { /// Iterating complexity: `O(n + m)`, where /// - `n` is amount of intervals in `self` /// - `m` is amount of intervals in `other` - pub fn difference<'a>(&'a self, other: &'a Self) -> impl Iterator> + '_ { + pub fn difference<'a>(&'a self, other: &'a Self) -> impl Iterator> + 'a { DifferenceIterator { iter1: self.iter(), iter2: other.iter(), diff --git a/common/src/gas_provider/internal.rs b/common/src/gas_provider/internal.rs index 9209dfa579a..6000193b2d6 100644 --- a/common/src/gas_provider/internal.rs +++ b/common/src/gas_provider/internal.rs @@ -556,7 +556,7 @@ where let key = key.into(); let mut node = Self::get_node(key).ok_or_else(InternalError::node_not_found)?; - #[cfg(feature = "fuzz")] + #[cfg(fuzz)] { let s = fail::FailScenario::setup(); // This is a fail point with name `fail_fuzzer`. diff --git a/common/src/lib.rs b/common/src/lib.rs index f2e49093bdd..da4ff6fe6a0 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -77,6 +77,7 @@ pub use gas_provider::{ /// Type alias for gas entity. pub type Gas = u64; +/// NOTE: Implementation of this for `u64` places bytes from idx=0. pub trait Origin: Sized { fn into_origin(self) -> H256; fn from_origin(val: H256) -> Self; diff --git a/core-backend/Cargo.toml b/core-backend/Cargo.toml index 15c459261d4..fb841a10ff7 100644 --- a/core-backend/Cargo.toml +++ b/core-backend/Cargo.toml @@ -2,12 +2,13 @@ name = "gear-core-backend" description = "Gear WASM backend" documentation = "https://docs.rs/gear-core-backend" +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true homepage.workspace = true repository.workspace = true +rust-version.workspace = true [dependencies] gear-core.workspace = true diff --git a/core-processor/src/configs.rs b/core-processor/src/configs.rs index a829a7d7f9c..9964bef46f0 100644 --- a/core-processor/src/configs.rs +++ b/core-processor/src/configs.rs @@ -26,9 +26,6 @@ use gear_core::{ pub use gear_wasm_instrument::syscalls::SyscallName; -/// Number of max pages number to use it in tests. -pub const TESTS_MAX_PAGES_NUMBER: u16 = 512; - /// Contextual block information. #[derive(Clone, Copy, Debug, Default)] pub struct BlockInfo { diff --git a/core/src/costs.rs b/core/src/costs.rs index 58c6dae5629..1fcec7b2a97 100644 --- a/core/src/costs.rs +++ b/core/src/costs.rs @@ -502,6 +502,21 @@ impl SyscallCosts { } } +/// Memory pages costs. +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub struct PagesCosts { + /// Loading from storage and moving it in program memory cost. + pub load_page_data: CostOf, + /// Uploading page data to storage cost. + pub upload_page_data: CostOf, + /// Memory grow cost. + pub mem_grow: CostOf, + /// Memory grow per page cost. + pub mem_grow_per_page: CostOf, + /// Parachain read heuristic cost. + pub parachain_read_heuristic: CostOf, +} + /// Memory pages lazy access costs. #[derive(Debug, Default, Clone, PartialEq, Eq)] pub struct LazyPagesCosts { @@ -521,6 +536,15 @@ pub struct LazyPagesCosts { pub load_page_storage_data: CostOf, } +/// IO costs. +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub struct IoCosts { + /// Consts for common pages. + pub common: PagesCosts, + /// Consts for lazy pages. + pub lazy_pages: LazyPagesCosts, +} + /// Holding in storages rent costs. #[derive(Debug, Default, Clone, PartialEq, Eq)] pub struct RentCosts { diff --git a/core/src/gas_metering/schedule.rs b/core/src/gas_metering/schedule.rs index 997b9e89a72..ca7ebedb286 100644 --- a/core/src/gas_metering/schedule.rs +++ b/core/src/gas_metering/schedule.rs @@ -1193,6 +1193,27 @@ impl From for SyscallCosts { } } +impl From for IoCosts { + fn from(val: MemoryWeights) -> Self { + Self { + common: PagesCosts::from(val.clone()), + lazy_pages: LazyPagesCosts::from(val), + } + } +} + +impl From for PagesCosts { + fn from(val: MemoryWeights) -> Self { + Self { + load_page_data: val.load_page_data.ref_time().into(), + upload_page_data: val.upload_page_data.ref_time().into(), + mem_grow: val.mem_grow.ref_time().into(), + mem_grow_per_page: val.mem_grow_per_page.ref_time().into(), + parachain_read_heuristic: val.parachain_read_heuristic.ref_time().into(), + } + } +} + impl From for LazyPagesCosts { fn from(val: MemoryWeights) -> Self { Self { diff --git a/ethexe/cli/src/args.rs b/ethexe/cli/src/args.rs index 8ec865259e9..05ea0dbd1a0 100644 --- a/ethexe/cli/src/args.rs +++ b/ethexe/cli/src/args.rs @@ -117,7 +117,7 @@ pub struct Args { #[allow(missing_docs)] #[clap(flatten)] - pub rpc_params: RpcParams, + pub rpc_params: Option, #[command(subcommand)] pub extra_command: Option, @@ -167,10 +167,10 @@ pub struct UploadCodeArgs { #[derive(Clone, Debug, Deserialize, Parser)] pub struct CreateProgramArgs { code_id: String, - init_payload: String, - value: u128, } +// TODO (breathx): support message sending here. + impl ExtraCommands { pub async fn run(&self, config: &config::Config) -> anyhow::Result<()> { let signer = ethexe_signer::Signer::new(config.key_path.clone())?; @@ -288,15 +288,8 @@ impl ExtraCommands { .code_id .parse() .map_err(|err| anyhow!("failed to parse code id: {err}"))?; + let salt = rand::random(); - let init_payload = if let Some(init_payload) = - create_program_args.init_payload.strip_prefix("0x") - { - hex::decode(init_payload)? - } else { - create_program_args.init_payload.clone().into_bytes() - }; - let value = create_program_args.value; let Some((sender_address, ethexe_ethereum)) = maybe_sender_address.zip(maybe_ethereum) @@ -308,13 +301,11 @@ impl ExtraCommands { let router = ethexe_ethereum.router(); - let (tx, actor_id) = router - .create_program(code_id, salt, init_payload, value) - .await?; + let (tx, actor_id) = router.create_program(code_id, salt).await?; println!("Completed in transaction {tx:?}"); println!( - "Waiting for state update of program {}...", + "Program address on Ethereum {}", actor_id.to_address_lossy() ); diff --git a/ethexe/cli/src/config.rs b/ethexe/cli/src/config.rs index daf0a4ad456..031723fc0fd 100644 --- a/ethexe/cli/src/config.rs +++ b/ethexe/cli/src/config.rs @@ -215,7 +215,7 @@ impl TryFrom for Config { prometheus_config: args.prometheus_params.and_then(|params| { params.prometheus_config(DEFAULT_PROMETHEUS_PORT, "ethexe-dev".to_string()) }), - rpc_config: args.rpc_params.as_config(), + rpc_config: args.rpc_params.and_then(|v| v.as_config()), }) } } diff --git a/ethexe/cli/src/params/rpc.rs b/ethexe/cli/src/params/rpc.rs index 72cf961c1a6..675ecd0e17b 100644 --- a/ethexe/cli/src/params/rpc.rs +++ b/ethexe/cli/src/params/rpc.rs @@ -19,7 +19,10 @@ use clap::Args; use ethexe_rpc::RpcConfig; use serde::Deserialize; -use std::net::{Ipv4Addr, SocketAddr}; +use std::{ + net::{Ipv4Addr, SocketAddr}, + str::FromStr, +}; /// Parameters used to config prometheus. #[derive(Debug, Clone, Args, Deserialize)] @@ -35,6 +38,14 @@ pub struct RpcParams { /// Do not start rpc endpoint. #[arg(long, default_value = "false")] pub no_rpc: bool, + + /// Specify browser *origins* allowed to access the HTTP & WS RPC servers. + /// + /// A comma-separated list of origins (protocol://domain or special `null` + /// value). Value of `all` will disable origin validation. Default is to + /// allow localhost origin. + #[arg(long)] + pub rpc_cors: Option, } impl RpcParams { @@ -53,6 +64,64 @@ impl RpcParams { let listen_addr = SocketAddr::new(ip, self.rpc_port); - Some(RpcConfig { listen_addr }) + let cors = self + .rpc_cors + .clone() + .unwrap_or_else(|| { + Cors::List(vec![ + "http://localhost:*".into(), + "http://127.0.0.1:*".into(), + "https://localhost:*".into(), + "https://127.0.0.1:*".into(), + ]) + }) + .into(); + + Some(RpcConfig { listen_addr, cors }) + } +} + +/// CORS setting +/// +/// The type is introduced to overcome `Option>` handling of `clap`. +#[derive(Clone, Debug, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum Cors { + /// All hosts allowed. + All, + /// Only hosts on the list are allowed. + List(Vec), +} + +impl From for Option> { + fn from(cors: Cors) -> Self { + match cors { + Cors::All => None, + Cors::List(list) => Some(list), + } + } +} + +impl FromStr for Cors { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + let mut is_all = false; + let mut origins = Vec::new(); + for part in s.split(',') { + match part { + "all" | "*" => { + is_all = true; + break; + } + other => origins.push(other.to_owned()), + } + } + + if is_all { + Ok(Cors::All) + } else { + Ok(Cors::List(origins)) + } } } diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 6f5b577f6dd..f13a27b3e30 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -449,6 +449,13 @@ impl Service { } } + pub async fn run(self) -> Result<()> { + self.run_inner().await.map_err(|err| { + log::error!("Service finished work with error: {err:?}"); + err + }) + } + async fn run_inner(self) -> Result<()> { let Service { db, @@ -625,13 +632,6 @@ impl Service { Ok(()) } - pub async fn run(self) -> Result<()> { - self.run_inner().await.map_err(|err| { - log::error!("Service finished work with error: {:?}", err); - err - }) - } - async fn post_process_commitments( code_commitments: Vec, block_commitments: Vec, @@ -1016,6 +1016,7 @@ mod tests { )), rpc_config: Some(RpcConfig { listen_addr: SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 9944), + cors: None, }), }) .await diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index f5f7def73cf..0dfab5948fe 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -502,10 +502,6 @@ async fn ping_reorg() { assert_eq!(res.program_id, ping_id); assert_eq!(res.reply_payload, b"PONG"); - // Await for service block with user reply handling - // TODO: this is for better logs reading only, should find a better solution #4099 - tokio::time::sleep(env.block_time).await; - log::info!("📗 Test after reverting to the program creation snapshot"); provider .anvil_revert(program_created_snapshot_id) @@ -547,10 +543,6 @@ async fn ping_reorg() { let res = send_message.wait_for().await.unwrap(); assert_eq!(res.program_id, ping_id); assert_eq!(res.reply_payload, b"PONG"); - - // Await for service block with user reply handling - // TODO: this is for better logs reading only, should find a better solution #4099 - tokio::time::sleep(Duration::from_secs(1)).await; } // Mine 150 blocks - send message - mine 150 blocks. @@ -1072,12 +1064,15 @@ mod utils { Ok(WaitForUploadCode { listener, code_id }) } + // TODO (breathx): split it into different functions WITHIN THE PR. pub async fn create_program( &self, code_id: CodeId, payload: &[u8], value: u128, ) -> Result { + const EXECUTABLE_BALANCE: u128 = 500_000_000_000_000; + log::info!( "📗 Create program, code_id {code_id}, payload len {}", payload.len() @@ -1085,12 +1080,23 @@ mod utils { let listener = self.events_publisher().subscribe().await; - let (_, program_id) = self - .ethereum - .router() - .create_program(code_id, H256::random(), payload, value) + let router = self.ethereum.router(); + + let (_, program_id) = router.create_program(code_id, H256::random()).await?; + + let program_address = program_id.to_address_lossy().0.into(); + + router + .wvara() + .approve(program_address, value + EXECUTABLE_BALANCE) .await?; + let mirror = self.ethereum.mirror(program_address.into_array().into()); + + mirror.executable_balance_top_up(EXECUTABLE_BALANCE).await?; + + mirror.send_message(payload, value).await?; + Ok(WaitForProgramCreation { listener, program_id, @@ -1449,7 +1455,6 @@ mod utils { rpc, tx_pool_artifacts, ); - let handle = task::spawn(service.run()); self.running_service_handle = Some(handle); diff --git a/ethexe/common/src/events/router.rs b/ethexe/common/src/events/router.rs index f6cbfbf6cd8..1fb538f192c 100644 --- a/ethexe/common/src/events/router.rs +++ b/ethexe/common/src/events/router.rs @@ -43,7 +43,9 @@ pub enum Event { code_id: CodeId, }, StorageSlotChanged, - ValidatorsChanged, + NextEraValidatorsCommitted { + next_era_start: u64, + }, } impl Event { @@ -67,7 +69,9 @@ impl Event { RequestEvent::ProgramCreated { actor_id, code_id } } Self::StorageSlotChanged => RequestEvent::StorageSlotChanged, - Self::ValidatorsChanged => RequestEvent::ValidatorsChanged, + Self::NextEraValidatorsCommitted { next_era_start } => { + RequestEvent::NextEraValidatorsCommitted { next_era_start } + } Self::BlockCommitted { .. } | Self::CodeGotValidated { .. } => return None, }) } @@ -90,5 +94,7 @@ pub enum RequestEvent { code_id: CodeId, }, StorageSlotChanged, - ValidatorsChanged, + NextEraValidatorsCommitted { + next_era_start: u64, + }, } diff --git a/ethexe/common/src/gear.rs b/ethexe/common/src/gear.rs index efd6eca1e9b..cdaa36710bc 100644 --- a/ethexe/common/src/gear.rs +++ b/ethexe/common/src/gear.rs @@ -51,6 +51,12 @@ pub struct CodeCommitment { pub valid: bool, } +#[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] +pub struct ValidatorsCommitment { + pub validators: Vec, + pub era_index: u64, +} + #[derive(Clone, Debug, Default, Encode, Decode, PartialEq, Eq)] pub enum CodeState { #[default] diff --git a/ethexe/contracts/.vscode/settings.json b/ethexe/contracts/.vscode/settings.json index 92ff8ef79c7..544c20a4fc3 100644 --- a/ethexe/contracts/.vscode/settings.json +++ b/ethexe/contracts/.vscode/settings.json @@ -6,5 +6,5 @@ "editor.defaultFormatter": "JuanBlanco.solidity" }, "solidity.formatter": "forge", - "solidity.compileUsingRemoteVersion": "v0.8.25" -} + "solidity.compileUsingRemoteVersion": "v0.8.28" +} \ No newline at end of file diff --git a/ethexe/contracts/foundry.toml b/ethexe/contracts/foundry.toml index f5cdbadb256..9bce0665b24 100644 --- a/ethexe/contracts/foundry.toml +++ b/ethexe/contracts/foundry.toml @@ -1,4 +1,5 @@ [profile.default] +solc_version = "0.8.28" src = "src" out = "out" libs = ["lib"] @@ -16,6 +17,7 @@ ignored_warnings_from = [ ] # Enable new EVM codegen via_ir = true +fs_permissions = [{access = "read-write", path = "out"}, { access = "read", path = "lib"}] [rpc_endpoints] sepolia = "${SEPOLIA_RPC_URL}" diff --git a/ethexe/contracts/lib/forge-std b/ethexe/contracts/lib/forge-std index 07263d193d6..1eea5bae12a 160000 --- a/ethexe/contracts/lib/forge-std +++ b/ethexe/contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit 07263d193d621c4b2b0ce8b4d54af58f6957d97d +Subproject commit 1eea5bae12ae557d589f9f0f0edae2faa47cb262 diff --git a/ethexe/contracts/lib/openzeppelin-contracts b/ethexe/contracts/lib/openzeppelin-contracts index 4b33d326fa8..69c8def5f22 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts +++ b/ethexe/contracts/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 4b33d326fa818082649830b2dc8dab84419852d6 +Subproject commit 69c8def5f222ff96f2b5beff05dfba996368aa79 diff --git a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable index 2bb98f7ae31..fa525310e45 160000 --- a/ethexe/contracts/lib/openzeppelin-contracts-upgradeable +++ b/ethexe/contracts/lib/openzeppelin-contracts-upgradeable @@ -1 +1 @@ -Subproject commit 2bb98f7ae310af7bc2554de59f8ed164f11c383e +Subproject commit fa525310e45f91eb20a6d3baa2644be8e0adba31 diff --git a/ethexe/contracts/lib/openzeppelin-foundry-upgrades b/ethexe/contracts/lib/openzeppelin-foundry-upgrades index 4cd15fc50b1..8e754fde23b 160000 --- a/ethexe/contracts/lib/openzeppelin-foundry-upgrades +++ b/ethexe/contracts/lib/openzeppelin-foundry-upgrades @@ -1 +1 @@ -Subproject commit 4cd15fc50b141c77d8cc9ff8efb44d00e841a299 +Subproject commit 8e754fde23b2b030a35bb47cd84b77dd42a44437 diff --git a/ethexe/contracts/lib/symbiotic-core b/ethexe/contracts/lib/symbiotic-core index 9cfc73f74b5..f71d470159b 160000 --- a/ethexe/contracts/lib/symbiotic-core +++ b/ethexe/contracts/lib/symbiotic-core @@ -1 +1 @@ -Subproject commit 9cfc73f74b568ad367284407d9b4dbca82a981eb +Subproject commit f71d470159b2466cfb8299d8e7b093717918f67d diff --git a/ethexe/contracts/script/Deployment.s.sol b/ethexe/contracts/script/Deployment.s.sol index a02f2c357ea..9bb6c213a66 100644 --- a/ethexe/contracts/script/Deployment.s.sol +++ b/ethexe/contracts/script/Deployment.s.sol @@ -41,7 +41,15 @@ contract DeploymentScript is Script { deployerAddress, abi.encodeCall( Router.initialize, - (deployerAddress, mirrorAddress, mirrorProxyAddress, address(wrappedVara), validatorsArray) + ( + deployerAddress, + mirrorAddress, + mirrorProxyAddress, + address(wrappedVara), + 1 days, + 2 hours, + validatorsArray + ) ) ) ); diff --git a/ethexe/contracts/src/IMirror.sol b/ethexe/contracts/src/IMirror.sol index 4f1895dfcaa..c8173296c4d 100644 --- a/ethexe/contracts/src/IMirror.sol +++ b/ethexe/contracts/src/IMirror.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; +import {Gear} from "./libraries/Gear.sol"; + // TODO (breathx): sort here everything. interface IMirror { /* Events section */ @@ -85,33 +87,19 @@ interface IMirror { /* Primary Gear logic */ - function sendMessage(bytes calldata payload, uint128 value) external payable returns (bytes32); + function sendMessage(bytes calldata payload, uint128 value) external returns (bytes32); - function sendReply(bytes32 repliedTo, bytes calldata payload, uint128 value) external payable; + function sendReply(bytes32 repliedTo, bytes calldata payload, uint128 value) external; - // payable? function claimValue(bytes32 claimedId) external; - function executableBalanceTopUp(uint128 value) external payable; + function executableBalanceTopUp(uint128 value) external; - function sendValueToInheritor() external; + function transferLockedValueToInheritor() external; /* Router-driven state and funds management */ - // NOTE: all of these methods will have additional handler (with hooks) for decoder. - - function updateState(bytes32 newStateHash) external; - - function setInheritor(address inheritor) external; - - function messageSent(bytes32 id, address destination, bytes calldata payload, uint128 value) external; - - function replySent(address destination, bytes calldata payload, uint128 value, bytes32 replyTo, bytes4 replyCode) - external; - - function valueClaimed(bytes32 claimedId, address destination, uint128 value) external; - function createDecoder(address implementation, bytes32 salt) external; + function initialize(address initializer, address decoder) external; - // TODO (breathx): consider removal of this in favor of separated creation and init. - function initMessage(address source, bytes calldata payload, uint128 value, uint128 executableBalance) external; + function performStateTransition(Gear.StateTransition calldata transition) external returns (bytes32); } diff --git a/ethexe/contracts/src/IMirrorDecoder.sol b/ethexe/contracts/src/IMirrorDecoder.sol index 193261942ce..3675fa5c08e 100644 --- a/ethexe/contracts/src/IMirrorDecoder.sol +++ b/ethexe/contracts/src/IMirrorDecoder.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.26; interface IMirrorDecoder { - function initialize() external; + function initialize(address mirror) external; function mirror() external view returns (address); diff --git a/ethexe/contracts/src/IRouter.sol b/ethexe/contracts/src/IRouter.sol index 94f9ebe8533..dfab107f2a5 100644 --- a/ethexe/contracts/src/IRouter.sol +++ b/ethexe/contracts/src/IRouter.sol @@ -23,6 +23,9 @@ interface IRouter { /// @notice Computation parameters for programs processing. /// @dev These parameters should be used for the operational logic of event and message handling on nodes. Any modifications will take effect in the next block. Gear.ComputationSettings computeSettings; + /// @notice Protocol timelines. + /// @dev This contains information about the protocol's timelines. + Gear.Timelines timelines; /// @notice Gear protocol data related to this router instance. /// @dev This contains information about the available codes and programs. Gear.ProtocolData protocolData; @@ -45,6 +48,11 @@ interface IRouter { /// @param blobTxHash The transaction hash that contains the WASM blob. Set to zero if applied to the current transaction. event CodeValidationRequested(bytes32 codeId, bytes32 blobTxHash); + /// @notice Emitted when validators for the next era has been set. + /// @dev This is an *informational* and *request* event, signaling that validators has been set for the next era. + /// @param startTimestamp timestamp when the new era starts. + event NextEraValidatorsCommitted(uint256 startTimestamp); + /// @notice Emitted when the computation settings have been changed. /// @dev This is both an *informational* and *requesting* event, signaling that an authority decided to change the computation settings. Users and program authors may want to adjust their practices, while validators need to apply the changes internally starting from the next block. /// @param threshold The amount of Gear gas initially allocated for free to allow the program to decide if it wants to process the incoming message. @@ -61,12 +69,9 @@ interface IRouter { /// @dev This is both an *informational* and *requesting* event, signaling that an authority decided to wipe the router state, rendering all previously existing codes and programs ineligible. Validators need to wipe their databases immediately. event StorageSlotChanged(); - /// @notice Emitted when the election mechanism forces the validator set to be changed. - /// @dev This is an *informational* event, signaling that only new validators are now able to pass commitment signing verification. - event ValidatorsChanged(); - // # Views. function genesisBlockHash() external view returns (bytes32); + function genesisTimestamp() external view returns (uint48); function latestCommittedBlockHash() external view returns (bytes32); function mirrorImpl() external view returns (address); @@ -98,21 +103,16 @@ interface IRouter { /// @dev CodeValidationRequested Emitted on success. function requestCodeValidation(bytes32 codeId, bytes32 blobTxHash) external; /// @dev ProgramCreated Emitted on success. - function createProgram(bytes32 codeId, bytes32 salt, bytes calldata payload, uint128 value) - external - returns (address); + function createProgram(bytes32 codeId, bytes32 salt) external returns (address); /// @dev ProgramCreated Emitted on success. - function createProgramWithDecoder( - address decoderImpl, - bytes32 codeId, - bytes32 salt, - bytes calldata payload, - uint128 value - ) external returns (address); + function createProgramWithDecoder(address decoderImpl, bytes32 codeId, bytes32 salt) external returns (address); // # Validators calls. /// @dev CodeGotValidated Emitted for each code in commitment. function commitCodes(Gear.CodeCommitment[] calldata codeCommitments, bytes[] calldata signatures) external; /// @dev BlockCommitted Emitted on success. Triggers multiple events for each corresponding mirror. function commitBlocks(Gear.BlockCommitment[] calldata blockCommitments, bytes[] calldata signatures) external; + /// @dev NextEraValidatorsCommitted Emitted on success. + function commitValidators(Gear.ValidatorsCommitment calldata validatorsCommitment, bytes[] calldata signatures) + external; } diff --git a/ethexe/contracts/src/Middleware.sol b/ethexe/contracts/src/Middleware.sol index af84f2ca125..196eeac13a0 100644 --- a/ethexe/contracts/src/Middleware.sol +++ b/ethexe/contracts/src/Middleware.sol @@ -12,21 +12,24 @@ import {IEntity} from "symbiotic-core/src/interfaces/common/IEntity.sol"; import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; import {INetworkRegistry} from "symbiotic-core/src/interfaces/INetworkRegistry.sol"; import {IOptInService} from "symbiotic-core/src/interfaces/service/IOptInService.sol"; +import {INetworkMiddlewareService} from "symbiotic-core/src/interfaces/service/INetworkMiddlewareService.sol"; +import {IVetoSlasher} from "symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol"; +import {IMigratableEntity} from "symbiotic-core/src/interfaces/common/IMigratableEntity.sol"; import {MapWithTimeData} from "./libraries/MapWithTimeData.sol"; -// TODO: support slashing -// TODO: use camelCase for immutable variables -// TODO: implement election logic +// TODO (asap): document all functions and variables +// TODO (asap): implement rewards distribution +// TODO (asap): add validators commission +// TODO: introduce common struct for address and balance/value // TODO: implement forced operators removal // TODO: implement forced vaults removal -// TODO: implement rewards distribution +// TODO: use hints for symbiotic calls contract Middleware { using EnumerableMap for EnumerableMap.AddressToUintMap; using MapWithTimeData for EnumerableMap.AddressToUintMap; using Subnetwork for address; - error ZeroVaultAddress(); error NotKnownVault(); error VaultWrongEpochDuration(); error UnknownCollateral(); @@ -36,57 +39,127 @@ contract Middleware { error IncorrectTimestamp(); error OperatorDoesNotExist(); error OperatorDoesNotOptIn(); + error UnsupportedHook(); + error UnsupportedBurner(); + error DelegatorNotInitialized(); + error SlasherNotInitialized(); + error IncompatibleSlasherType(); + error BurnerHookNotSupported(); + error VetoDurationTooShort(); + error VetoDurationTooLong(); + error IncompatibleVaultVersion(); + error NotRegisteredVault(); + error NotRegisteredOperator(); + error RoleMismatch(); + error ResolverMismatch(); + error ResolverSetDelayTooLong(); + + struct VaultSlashData { + address vault; + uint256 amount; + } + + struct SlashData { + address operator; + uint48 ts; + VaultSlashData[] vaults; + } + + struct SlashIdentifier { + address vault; + uint256 index; + } + + struct Config { + uint48 eraDuration; + uint48 minVaultEpochDuration; + uint48 operatorGracePeriod; + uint48 vaultGracePeriod; + uint48 minVetoDuration; + uint48 minSlashExecutionDelay; + uint256 maxResolverSetEpochsDelay; + address vaultRegistry; + uint64 allowedVaultImplVersion; + uint64 vetoSlasherImplType; + address operatorRegistry; + address networkRegistry; + address networkOptIn; + address middlewareService; + address collateral; + address roleSlashRequester; + address roleSlashExecutor; + address vetoResolver; + } uint96 public constant NETWORK_IDENTIFIER = 0; - uint48 public immutable ERA_DURATION; - uint48 public immutable GENESIS_TIMESTAMP; - uint48 public immutable OPERATOR_GRACE_PERIOD; - uint48 public immutable VAULT_GRACE_PERIOD; - uint48 public immutable VAULT_MIN_EPOCH_DURATION; - address public immutable VAULT_FACTORY; - address public immutable DELEGATOR_FACTORY; - address public immutable SLASHER_FACTORY; - address public immutable OPERATOR_REGISTRY; - address public immutable NETWORK_OPT_IN; - address public immutable COLLATERAL; - bytes32 public immutable SUBNETWORK; + uint48 public immutable eraDuration; + uint48 public immutable minVaultEpochDuration; + uint48 public immutable operatorGracePeriod; + uint48 public immutable vaultGracePeriod; + uint48 public immutable minVetoDuration; + uint48 public immutable minSlashExecutionDelay; + uint256 public immutable maxResolverSetEpochsDelay; + address public immutable vaultRegistry; + uint64 public immutable allowedVaultImplVersion; + uint64 public immutable vetoSlasherImplType; + address public immutable operatorRegistry; + address public immutable networkRegistry; + address public immutable networkOptIn; + address public immutable middlewareService; + address public immutable collateral; + address public immutable vetoResolver; + bytes32 public immutable subnetwork; + + address public roleSlashRequester; + address public roleSlashExecutor; EnumerableMap.AddressToUintMap private operators; EnumerableMap.AddressToUintMap private vaults; - constructor( - uint48 eraDuration, - address vaultFactory, - address delegatorFactory, - address slasherFactory, - address operatorRegistry, - address networkRegistry, - address networkOptIn, - address collateral - ) { - ERA_DURATION = eraDuration; - GENESIS_TIMESTAMP = Time.timestamp(); - OPERATOR_GRACE_PERIOD = 2 * eraDuration; - VAULT_GRACE_PERIOD = 2 * eraDuration; - VAULT_MIN_EPOCH_DURATION = 2 * eraDuration; - VAULT_FACTORY = vaultFactory; - DELEGATOR_FACTORY = delegatorFactory; - SLASHER_FACTORY = slasherFactory; - OPERATOR_REGISTRY = operatorRegistry; - NETWORK_OPT_IN = networkOptIn; - COLLATERAL = collateral; - SUBNETWORK = address(this).subnetwork(NETWORK_IDENTIFIER); - + constructor(Config memory cfg) { + _validateConfiguration(cfg); + + eraDuration = cfg.eraDuration; + minVaultEpochDuration = cfg.minVaultEpochDuration; + operatorGracePeriod = cfg.operatorGracePeriod; + vaultGracePeriod = cfg.vaultGracePeriod; + minVetoDuration = cfg.minVetoDuration; + minSlashExecutionDelay = cfg.minSlashExecutionDelay; + maxResolverSetEpochsDelay = cfg.maxResolverSetEpochsDelay; + vaultRegistry = cfg.vaultRegistry; + allowedVaultImplVersion = cfg.allowedVaultImplVersion; + vetoSlasherImplType = cfg.vetoSlasherImplType; + operatorRegistry = cfg.operatorRegistry; + networkRegistry = cfg.networkRegistry; + networkOptIn = cfg.networkOptIn; + middlewareService = cfg.middlewareService; + collateral = cfg.collateral; + roleSlashRequester = cfg.roleSlashRequester; + roleSlashExecutor = cfg.roleSlashExecutor; + vetoResolver = cfg.vetoResolver; + + subnetwork = address(this).subnetwork(NETWORK_IDENTIFIER); + + // Presently network and middleware are the same address INetworkRegistry(networkRegistry).registerNetwork(); + INetworkMiddlewareService(middlewareService).setMiddleware(address(this)); + } + + function changeSlashRequester(address newRole) external _onlyRole(roleSlashRequester) { + roleSlashRequester = newRole; + } + + function changeSlashExecutor(address newRole) external _onlyRole(roleSlashExecutor) { + roleSlashExecutor = newRole; } // TODO: Check that total stake is big enough function registerOperator() external { - if (!IRegistry(OPERATOR_REGISTRY).isEntity(msg.sender)) { + if (!IRegistry(operatorRegistry).isEntity(msg.sender)) { revert OperatorDoesNotExist(); } - if (!IOptInService(NETWORK_OPT_IN).isOptedIn(msg.sender, address(this))) { + if (!IOptInService(networkOptIn).isOptedIn(msg.sender, address(this))) { revert OperatorDoesNotOptIn(); } operators.append(msg.sender, 0); @@ -103,7 +176,7 @@ contract Middleware { function unregisterOperator(address operator) external { (, uint48 disabledTime) = operators.getTimes(operator); - if (disabledTime == 0 || Time.timestamp() < disabledTime + OPERATOR_GRACE_PERIOD) { + if (disabledTime == 0 || Time.timestamp() < disabledTime + operatorGracePeriod) { revert OperatorGracePeriodNotPassed(); } @@ -111,28 +184,65 @@ contract Middleware { } // TODO: check vault has enough stake - // TODO: support and check slasher function registerVault(address vault) external { - if (vault == address(0)) { - revert ZeroVaultAddress(); + if (!IRegistry(vaultRegistry).isEntity(vault)) { + revert NotKnownVault(); } - if (!IRegistry(VAULT_FACTORY).isEntity(vault)) { - revert NotKnownVault(); + if (IMigratableEntity(vault).version() != allowedVaultImplVersion) { + revert IncompatibleVaultVersion(); } - if (IVault(vault).epochDuration() < VAULT_MIN_EPOCH_DURATION) { + uint48 vaultEpochDuration = IVault(vault).epochDuration(); + if (vaultEpochDuration < minVaultEpochDuration) { revert VaultWrongEpochDuration(); } - if (IVault(vault).collateral() != COLLATERAL) { + if (IVault(vault).collateral() != collateral) { revert UnknownCollateral(); } + if (!IVault(vault).isDelegatorInitialized()) { + revert DelegatorNotInitialized(); + } + + if (!IVault(vault).isSlasherInitialized()) { + revert SlasherNotInitialized(); + } + IBaseDelegator delegator = IBaseDelegator(IVault(vault).delegator()); - if (delegator.maxNetworkLimit(SUBNETWORK) != type(uint256).max) { + if (delegator.maxNetworkLimit(subnetwork) != type(uint256).max) { delegator.setMaxNetworkLimit(NETWORK_IDENTIFIER, type(uint256).max); } + _delegatorHookCheck(IBaseDelegator(delegator).hook()); + + address slasher = IVault(vault).slasher(); + if (IEntity(slasher).TYPE() != vetoSlasherImplType) { + revert IncompatibleSlasherType(); + } + if (IVetoSlasher(slasher).isBurnerHook()) { + revert BurnerHookNotSupported(); + } + uint48 vetoDuration = IVetoSlasher(slasher).vetoDuration(); + if (vetoDuration < minVetoDuration) { + revert VetoDurationTooShort(); + } + if (vetoDuration + minSlashExecutionDelay > vaultEpochDuration) { + revert VetoDurationTooLong(); + } + if (IVetoSlasher(slasher).resolverSetEpochsDelay() > maxResolverSetEpochsDelay) { + revert ResolverSetDelayTooLong(); + } + + address resolver = IVetoSlasher(slasher).resolver(subnetwork, new bytes(0)); + if (resolver == address(0)) { + IVetoSlasher(slasher).setResolver(NETWORK_IDENTIFIER, vetoResolver, new bytes(0)); + } else if (resolver != vetoResolver) { + // TODO: consider how to support this case + revert ResolverMismatch(); + } + + _burnerCheck(IVault(vault).burner()); vaults.append(vault, uint160(msg.sender)); } @@ -160,19 +270,57 @@ contract Middleware { function unregisterVault(address vault) external { (, uint48 disabledTime) = vaults.getTimes(vault); - if (disabledTime == 0 || Time.timestamp() < disabledTime + VAULT_GRACE_PERIOD) { + if (disabledTime == 0 || Time.timestamp() < disabledTime + vaultGracePeriod) { revert VaultGracePeriodNotPassed(); } vaults.remove(vault); } - function getOperatorStakeAt(address operator, uint48 ts) - external - view - _validTimestamp(ts) - returns (uint256 stake) - { + function makeElectionAt(uint48 ts, uint256 maxValidators) public view returns (address[] memory) { + require(maxValidators > 0, "Max validators must be greater than zero"); + + (address[] memory activeOperators, uint256[] memory stakes) = getActiveOperatorsStakeAt(ts); + + if (activeOperators.length <= maxValidators) { + return activeOperators; + } + + // Bubble sort descending + uint256 n = activeOperators.length; + for (uint256 i = 0; i < n; i++) { + for (uint256 j = 0; j < n - 1 - i; j++) { + if (stakes[j] < stakes[j + 1]) { + (stakes[j], stakes[j + 1]) = (stakes[j + 1], stakes[j]); + (activeOperators[j], activeOperators[j + 1]) = (activeOperators[j + 1], activeOperators[j]); + } + } + } + + // Choose between validators with the same stake + uint256 sameStakeCount = 1; + uint256 lastStake = stakes[maxValidators - 1]; + for (uint256 i = maxValidators; i < activeOperators.length; i++) { + if (stakes[i] != lastStake) { + break; + } + sameStakeCount += 1; + } + + if (sameStakeCount > 1) { + // If there are multiple validators with the same stake, choose one randomly + uint256 randomIndex = uint256(keccak256(abi.encodePacked(ts))) % sameStakeCount; + activeOperators[maxValidators - 1] = activeOperators[maxValidators + randomIndex - 1]; + } + + assembly { + mstore(activeOperators, maxValidators) + } + + return activeOperators; + } + + function getOperatorStakeAt(address operator, uint48 ts) public view _validTimestamp(ts) returns (uint256 stake) { (uint48 enabledTime, uint48 disabledTime) = operators.getTimes(operator); if (!_wasActiveAt(enabledTime, disabledTime, ts)) { return 0; @@ -181,6 +329,7 @@ contract Middleware { stake = _collectOperatorStakeFromVaultsAt(operator, ts); } + // TODO: change return signature function getActiveOperatorsStakeAt(uint48 ts) public view @@ -210,6 +359,40 @@ contract Middleware { } } + function requestSlash(SlashData[] calldata data) external _onlyRole(roleSlashRequester) { + for (uint256 i; i < data.length; ++i) { + SlashData calldata slashData = data[i]; + if (!operators.contains(slashData.operator)) { + revert NotRegisteredOperator(); + } + + for (uint256 j; j < slashData.vaults.length; ++j) { + VaultSlashData calldata vaultData = slashData.vaults[j]; + + if (!vaults.contains(vaultData.vault)) { + revert NotRegisteredVault(); + } + + address slasher = IVault(vaultData.vault).slasher(); + IVetoSlasher(slasher).requestSlash( + subnetwork, slashData.operator, vaultData.amount, slashData.ts, new bytes(0) + ); + } + } + } + + function executeSlash(SlashIdentifier[] calldata slashes) external _onlyRole(roleSlashExecutor) { + for (uint256 i; i < slashes.length; ++i) { + SlashIdentifier calldata slash = slashes[i]; + + if (!vaults.contains(slash.vault)) { + revert NotRegisteredVault(); + } + + IVetoSlasher(IVault(slash.vault).slasher()).executeSlash(slash.index, new bytes(0)); + } + } + function _collectOperatorStakeFromVaultsAt(address operator, uint48 ts) private view returns (uint256 stake) { for (uint256 i; i < vaults.length(); ++i) { (address vault, uint48 vaultEnabledTime, uint48 vaultDisabledTime) = vaults.atWithTimes(i); @@ -218,7 +401,7 @@ contract Middleware { continue; } - stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(SUBNETWORK, operator, ts, new bytes(0)); + stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(subnetwork, operator, ts, new bytes(0)); } } @@ -226,6 +409,60 @@ contract Middleware { return enabledTime != 0 && enabledTime <= ts && (disabledTime == 0 || disabledTime >= ts); } + // Supports only null hook for now + function _delegatorHookCheck(address hook) private pure { + if (hook != address(0)) { + revert UnsupportedHook(); + } + } + + // Supports only null burner for now + function _burnerCheck(address burner) private pure { + if (burner == address(0)) { + revert UnsupportedBurner(); + } + } + + function _validateConfiguration(Config memory cfg) private pure { + require(cfg.eraDuration > 0, "Era duration cannot be zero"); + + // Middleware must support cases when election for next era is made before the start of the next era, + // so the min vaults epoch duration must be bigger than `eraDuration + electionDelay`. + // The election delay is less than or equal to the era duration, so limit `2 * eraDuration` is enough. + require( + cfg.minVaultEpochDuration >= 2 * cfg.eraDuration, "Min vaults epoch duration must be bigger than 2 eras" + ); + + // Operator grace period cannot be smaller than minimum vaults epoch duration. + // Otherwise, it would be impossible to do slash in the next era sometimes. + require( + cfg.operatorGracePeriod >= cfg.minVaultEpochDuration, + "Operator grace period must be bigger than min vaults epoch duration" + ); + + // Vault grace period cannot be smaller than minimum vaults epoch duration. + // Otherwise, it would be impossible to do slash in the next era sometimes. + require( + cfg.vaultGracePeriod >= cfg.minVaultEpochDuration, + "Vault grace period must be bigger than min vaults epoch duration" + ); + + // Give some time for the resolvers to veto slashes. + require(cfg.minVetoDuration > 0, "Veto duration cannot be zero"); + + // Symbiotic guarantees that any veto slasher has veto duration less than vault epoch duration. + // But we also want to guarantee that there is some time to execute the slash. + require(cfg.minSlashExecutionDelay > 0, "Min slash execution delay cannot be zero"); + require( + cfg.minVetoDuration + cfg.minSlashExecutionDelay <= cfg.minVaultEpochDuration, + "Veto duration and slash execution delay must be less than or equal to min vaults epoch duration" + ); + + // In order to be able to change resolver, we need to limit max delay in epochs. + // `3` - is minimal number of epochs, which is symbiotic veto slasher impl restrictions. + require(cfg.maxResolverSetEpochsDelay >= 3, "Resolver set epochs delay must be at least 3"); + } + // Timestamp must be always in the past, but not too far, // so that some operators or vaults can be already unregistered. modifier _validTimestamp(uint48 ts) { @@ -233,11 +470,18 @@ contract Middleware { revert IncorrectTimestamp(); } - uint48 gracePeriod = OPERATOR_GRACE_PERIOD < VAULT_GRACE_PERIOD ? OPERATOR_GRACE_PERIOD : VAULT_GRACE_PERIOD; + uint48 gracePeriod = operatorGracePeriod < vaultGracePeriod ? operatorGracePeriod : vaultGracePeriod; if (ts + gracePeriod <= Time.timestamp()) { revert IncorrectTimestamp(); } _; } + + modifier _onlyRole(address role) { + if (msg.sender != role) { + revert RoleMismatch(); + } + _; + } } diff --git a/ethexe/contracts/src/Mirror.sol b/ethexe/contracts/src/Mirror.sol index 68c85cce545..059f24c9465 100644 --- a/ethexe/contracts/src/Mirror.sol +++ b/ethexe/contracts/src/Mirror.sol @@ -7,14 +7,59 @@ import {IRouter} from "./IRouter.sol"; import {IWrappedVara} from "./IWrappedVara.sol"; import {IMirrorDecoder} from "./IMirrorDecoder.sol"; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; +import {Gear} from "./libraries/Gear.sol"; -// TODO: handle ETH sent in each contract. contract Mirror is IMirror { - bytes32 public stateHash; - address public inheritor; - // NOTE: Nonce 0 is used for init message in current implementation - uint256 public nonce; /* = 1 */ address public decoder; + address public inheritor; + /// @dev This nonce is the source for message ids unique generations. Must be bumped on each send. Zeroed nonce is always represent init message by eligible account. + address public initializer; + bytes32 public stateHash; + uint256 public nonce; + + /// @dev Only the router can call functions marked with this modifier. + modifier onlyRouter() { + require(msg.sender == router(), "caller is not the router"); + _; + } + + /// @dev Non-zero value must be transferred from source to router in functions marked with this modifier. + modifier retrievingValue(uint128 value) { + if (value != 0) { + address routerAddr = router(); + bool success = _wvara(routerAddr).transferFrom(_source(), routerAddr, value); + require(success, "failed to transfer non-zero amount of WVara from source to router"); + } + _; + } + + // TODO (breathx): terminated programs compute threshold must always be treated as balance-enough. + /// @dev Functions marked with this modifier can be called only after the program is terminated. + modifier whenTerminated() { + require(inheritor != address(0), "program is not terminated"); + _; + } + + /// @dev Functions marked with this modifier can be called only after the initializer has created the init message. + modifier whenInitMessageCreated() { + require(nonce > 0, "initializer hasn't created init message yet"); + _; + } + + /// @dev Functions marked with this modifier can be called only after the initializer has created the init message or from the initializer (first access). + modifier whenInitMessageCreatedOrFromInitializer() { + require( + nonce > 0 || _source() == initializer, + "initializer hasn't created init message yet; and source is not initializer" + ); + _; + } + + /// @dev Functions marked with this modifier can be called only if the program is active. + modifier whileActive() { + require(inheritor == address(0), "program is terminated"); + _; + } /* Operational functions */ @@ -24,12 +69,13 @@ contract Mirror is IMirror { /* Primary Gear logic */ - // TODO (breathx): sendMessage with msg.sender, but with tx.origin if decoder. - function sendMessage(bytes calldata _payload, uint128 _value) external payable returns (bytes32) { - require(inheritor == address(0), "program is terminated"); - - _retrieveValueToRouter(_value); - + function sendMessage(bytes calldata _payload, uint128 _value) + external + whileActive + whenInitMessageCreatedOrFromInitializer + retrievingValue(_value) + returns (bytes32) + { bytes32 id = keccak256(abi.encodePacked(address(this), nonce++)); emit MessageQueueingRequested(id, _source(), _payload, _value); @@ -37,134 +83,179 @@ contract Mirror is IMirror { return id; } - function sendReply(bytes32 _repliedTo, bytes calldata _payload, uint128 _value) external payable { - require(inheritor == address(0), "program is terminated"); - - _retrieveValueToRouter(_value); - + function sendReply(bytes32 _repliedTo, bytes calldata _payload, uint128 _value) + external + whileActive + whenInitMessageCreated + retrievingValue(_value) + { emit ReplyQueueingRequested(_repliedTo, _source(), _payload, _value); } - function claimValue(bytes32 _claimedId) external { - require(inheritor == address(0), "program is terminated"); - + function claimValue(bytes32 _claimedId) external whenInitMessageCreated { emit ValueClaimingRequested(_claimedId, _source()); } - function executableBalanceTopUp(uint128 _value) external payable { - require(inheritor == address(0), "program is terminated"); - - _retrieveValueToRouter(_value); - + function executableBalanceTopUp(uint128 _value) external whileActive retrievingValue(_value) { emit ExecutableBalanceTopUpRequested(_value); } - function sendValueToInheritor() public { - require(inheritor != address(0), "program is not terminated"); - - uint256 balance = IWrappedVara(IRouter(router()).wrappedVara()).balanceOf(address(this)); - _sendValueTo(inheritor, uint128(balance)); + function transferLockedValueToInheritor() public whenTerminated { + uint256 balance = _wvara(router()).balanceOf(address(this)); + _transferValue(inheritor, uint128(balance)); } /* Router-driven state and funds management */ - function updateState(bytes32 newStateHash) external onlyRouter { - if (stateHash != newStateHash) { - stateHash = newStateHash; + function initialize(address _initializer, address _decoder) public onlyRouter { + require(initializer == address(0), "initializer could only be set once"); + require(decoder == address(0), "initializer could only be set once"); - emit StateChanged(stateHash); - } + initializer = _initializer; + decoder = _decoder; } - // TODO (breathx): handle after-all transfers to program on wvara event properly. - function setInheritor(address _inheritor) external onlyRouter { - inheritor = _inheritor; + // NOTE (breathx): value to receive should be already handled in router. + function performStateTransition(Gear.StateTransition calldata _transition) external onlyRouter returns (bytes32) { + /// @dev Verify that the transition belongs to this contract. + require(_transition.actorId == address(this), "actorId must be this contract"); + + /// @dev Send all outgoing messages. + bytes32 messagesHashesHash = _sendMessages(_transition.messages); + + /// @dev Send value for each claim. + bytes32 valueClaimsHash = _claimValues(_transition.valueClaims); - sendValueToInheritor(); + /// @dev Set inheritor if specified. + if (_transition.inheritor != address(0)) { + _setInheritor(_transition.inheritor); + } + + /// @dev Update the state hash if changed. + if (stateHash != _transition.newStateHash) { + _updateStateHash(_transition.newStateHash); + } + + /// @dev Return hash of performed state transition. + return Gear.stateTransitionHash( + _transition.actorId, + _transition.newStateHash, + _transition.inheritor, + _transition.valueToReceive, + valueClaimsHash, + messagesHashesHash + ); } - function messageSent(bytes32 id, address destination, bytes calldata payload, uint128 value) external onlyRouter { - // TODO (breathx): handle if goes to mailbox or not. Send value in place or not. + // TODO (breathx): consider when to emit event: on success in decoder, on failure etc. + // TODO (breathx): make decoder gas configurable. + // TODO (breathx): handle if goes to mailbox or not. + function _sendMessages(Gear.Message[] calldata _messages) private returns (bytes32) { + bytes memory messagesHashes; + + for (uint256 i = 0; i < _messages.length; i++) { + Gear.Message calldata message = _messages[i]; + messagesHashes = bytes.concat(messagesHashes, Gear.messageHash(message)); + + // TODO (breathx): optimize it to bytes WITHIN THE PR. + if (message.replyDetails.to == 0) { + _sendMailboxedMessage(message); + } else { + _sendReplyMessage(message); + } + } + + return keccak256(messagesHashes); + } + + /// @dev Value never sent since goes to mailbox. + function _sendMailboxedMessage(Gear.Message calldata _message) private { if (decoder != address(0)) { - bytes memory callData = - abi.encodeWithSelector(IMirrorDecoder.onMessageSent.selector, id, destination, payload, value); + bytes memory callData = abi.encodeWithSelector( + IMirrorDecoder.onMessageSent.selector, + _message.id, + _message.destination, + _message.payload, + _message.value + ); // Result is ignored here. - // TODO (breathx): make gas configurable? (bool success,) = decoder.call{gas: 500_000}(callData); if (success) { - // TODO (breathx): emit event with message hash? return; } } - emit Message(id, destination, payload, value); + emit Message(_message.id, _message.destination, _message.payload, _message.value); } - function replySent(address destination, bytes calldata payload, uint128 value, bytes32 replyTo, bytes4 replyCode) - external - onlyRouter - { - _sendValueTo(destination, value); + /// @dev Non-zero value always sent since never goes to mailbox. + function _sendReplyMessage(Gear.Message calldata _message) private { + _transferValue(_message.destination, _message.value); if (decoder != address(0)) { bytes memory callData = abi.encodeWithSelector( - IMirrorDecoder.onReplySent.selector, destination, payload, value, replyTo, replyCode + IMirrorDecoder.onReplySent.selector, + _message.destination, + _message.payload, + _message.value, + _message.replyDetails.to, + _message.replyDetails.code ); // Result is ignored here. - // TODO (breathx): make gas configurable? (bool success,) = decoder.call{gas: 500_000}(callData); if (success) { - // TODO (breathx): emit event with reply hash? return; } } - emit Reply(payload, value, replyTo, replyCode); + emit Reply(_message.payload, _message.value, _message.replyDetails.to, _message.replyDetails.code); } - function valueClaimed(bytes32 claimedId, address destination, uint128 value) external onlyRouter { - _sendValueTo(destination, value); + function _claimValues(Gear.ValueClaim[] calldata _claims) private returns (bytes32) { + bytes memory valueClaimsBytes; - emit ValueClaimed(claimedId, value); - } + for (uint256 i = 0; i < _claims.length; i++) { + Gear.ValueClaim calldata claim = _claims[i]; - function createDecoder(address implementation, bytes32 salt) external onlyRouter { - require(nonce == 0, "decoder could only be created before init message"); - require(decoder == address(0), "decoder could only be created once"); + valueClaimsBytes = bytes.concat(valueClaimsBytes, Gear.valueClaimBytes(claim)); - decoder = Clones.cloneDeterministic(implementation, salt); + _transferValue(claim.destination, claim.value); - IMirrorDecoder(decoder).initialize(); - } + emit ValueClaimed(claim.messageId, claim.value); + } - function initMessage(address source, bytes calldata payload, uint128 value, uint128 executableBalance) - external - onlyRouter - { - require(nonce == 0, "init message must be created before any others"); + return keccak256(valueClaimsBytes); + } - /* - * @dev: charging at this point is already made in router. - */ - uint256 initNonce = nonce++; - bytes32 id = keccak256(abi.encodePacked(address(this), initNonce)); + // TODO (breathx): optimize inheritor to bytes WITHIN THE PR. + function _setInheritor(address _inheritor) private whileActive { + /// @dev Set inheritor. + inheritor = _inheritor; - emit ExecutableBalanceTopUpRequested(executableBalance); - emit MessageQueueingRequested(id, source, payload, value); + /// @dev Transfer all available balance to the inheritor. + transferLockedValueToInheritor(); } - modifier onlyRouter() { - require(msg.sender == router(), "only router contract is eligible for operation"); - _; + function _updateStateHash(bytes32 _stateHash) private { + /// @dev Set state hash. + stateHash = _stateHash; + + /// @dev Emits an event signaling that the state has changed. + emit StateChanged(stateHash); } /* Local helper functions */ + function _wvara(address routerAddr) private view returns (IWrappedVara) { + address wvaraAddr = IRouter(routerAddr).wrappedVara(); + return IWrappedVara(wvaraAddr); + } + function _source() private view returns (address) { if (msg.sender == decoder) { return tx.origin; @@ -173,25 +264,10 @@ contract Mirror is IMirror { } } - function _retrieveValueToRouter(uint128 _value) private { - if (_value != 0) { - address routerAddress = router(); - - IWrappedVara wrappedVara = IWrappedVara(IRouter(routerAddress).wrappedVara()); - - bool success = wrappedVara.transferFrom(_source(), routerAddress, _value); - - require(success, "failed to retrieve WVara"); - } - } - - function _sendValueTo(address destination, uint128 value) private { - IWrappedVara wrappedVara = IWrappedVara(IRouter(router()).wrappedVara()); - + function _transferValue(address destination, uint128 value) private { if (value != 0) { - bool success = wrappedVara.transfer(destination, value); - - require(success, "failed to send WVara"); + bool success = _wvara(router()).transfer(destination, value); + require(success, "failed to transfer WVara"); } } } diff --git a/ethexe/contracts/src/Router.sol b/ethexe/contracts/src/Router.sol index 7f4f588e7af..41a05e5f152 100644 --- a/ethexe/contracts/src/Router.sol +++ b/ethexe/contracts/src/Router.sol @@ -1,17 +1,17 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; -import {StorageSlot} from "@openzeppelin/contracts/utils/StorageSlot.sol"; -import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; -import {ReentrancyGuardTransient} from "@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol"; -import {IRouter} from "./IRouter.sol"; +import {Gear} from "./libraries/Gear.sol"; import {IMirror} from "./IMirror.sol"; +import {IMirrorDecoder} from "./IMirrorDecoder.sol"; +import {IRouter} from "./IRouter.sol"; import {IWrappedVara} from "./IWrappedVara.sol"; -import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import {Gear} from "./libraries/Gear.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {ReentrancyGuardTransient} from "@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol"; +import {StorageSlot} from "@openzeppelin/contracts/utils/StorageSlot.sol"; +// TODO (gsobol): append middleware for slashing support. contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { // keccak256(abi.encode(uint256(keccak256("router.storage.Slot")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant SLOT_STORAGE = 0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000; @@ -26,18 +26,28 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { address _mirror, address _mirrorProxy, address _wrappedVara, + uint256 _eraDuration, + uint256 _electionDuration, address[] calldata _validators ) public initializer { __Ownable_init(_owner); + // Because of validator storages impl we have to check, that current timestamp is greater than 0. + require(block.timestamp > 0, "current timestamp must be greater than 0"); + require(_electionDuration > 0, "election duration must be greater than 0"); + require(_eraDuration > _electionDuration, "era duration must be greater than election duration"); + _setStorageSlot("router.storage.RouterV1"); Storage storage router = _router(); router.genesisBlock = Gear.newGenesis(); router.implAddresses = Gear.AddressBook(_mirror, _mirrorProxy, _wrappedVara); router.validationSettings.signingThresholdPercentage = Gear.SIGNING_THRESHOLD_PERCENTAGE; - _setValidators(router, _validators); router.computeSettings = Gear.defaultComputationSettings(); + router.timelines = Gear.Timelines(_eraDuration, _electionDuration); + + // Set validators for the era 0. + _resetValidators(router.validationSettings.validators0, _validators, block.timestamp); } function reinitialize() public onlyOwner reinitializer(2) { @@ -46,14 +56,33 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { _setStorageSlot("router.storage.RouterV2"); Storage storage newRouter = _router(); + // Set current block as genesis. newRouter.genesisBlock = Gear.newGenesis(); + + // New router latestCommittedBlock is already zeroed. + + // Copy impl addresses from the old router. newRouter.implAddresses = oldRouter.implAddresses; + // Copy signing threshold percentage from the old router. newRouter.validationSettings.signingThresholdPercentage = oldRouter.validationSettings.signingThresholdPercentage; - _setValidators(newRouter, oldRouter.validationSettings.validators); + // Copy validators from the old router. + // TODO (gsobol): consider what to do. Maybe we should start reelection process. + // Skipping validators1 copying - means we forget election results + // if an election is already done for the next era. + _resetValidators( + newRouter.validationSettings.validators0, Gear.currentEraValidators(oldRouter).list, block.timestamp + ); + + // Copy computation settings from the old router. newRouter.computeSettings = oldRouter.computeSettings; + + // Copy timelines from the old router. + newRouter.timelines = oldRouter.timelines; + + // All protocol data must be removed - so leave it zeroed in new router. } // # Views. @@ -61,6 +90,10 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { return _router().genesisBlock.hash; } + function genesisTimestamp() public view returns (uint48) { + return _router().genesisBlock.timestamp; + } + function latestCommittedBlockHash() public view returns (bytes32) { return _router().latestCommittedBlock.hash; } @@ -78,10 +111,10 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { } function areValidators(address[] calldata _validators) public view returns (bool) { - Storage storage router = _router(); + Gear.Validators storage _currentValidators = Gear.currentEraValidators(_router()); for (uint256 i = 0; i < _validators.length; i++) { - if (!router.validationSettings.validatorsKeyMap[_validators[i]]) { + if (!_currentValidators.map[_validators[i]]) { return false; } } @@ -90,7 +123,7 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { } function isValidator(address _validator) public view returns (bool) { - return _router().validationSettings.validatorsKeyMap[_validator]; + return Gear.currentEraValidators(_router()).map[_validator]; } function signingThresholdPercentage() public view returns (uint16) { @@ -98,15 +131,18 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { } function validators() public view returns (address[] memory) { - return _router().validationSettings.validators; + return Gear.currentEraValidators(_router()).list; } function validatorsCount() public view returns (uint256) { - return _router().validationSettings.validators.length; + return Gear.currentEraValidators(_router()).list.length; } function validatorsThreshold() public view returns (uint256) { - return Gear.validatorsThresholdOf(_router().validationSettings); + IRouter.Storage storage router = _router(); + return Gear.validatorsThreshold( + Gear.currentEraValidators(router).list.length, router.validationSettings.signingThresholdPercentage + ); } function computeSettings() public view returns (Gear.ComputationSettings memory) { @@ -187,36 +223,54 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { emit CodeValidationRequested(_codeId, _blobTxHash); } - function createProgram(bytes32 _codeId, bytes32 _salt, bytes calldata _payload, uint128 _value) + function createProgram(bytes32 _codeId, bytes32 _salt) external returns (address) { + address mirror = _createProgram(_codeId, _salt); + + IMirror(mirror).initialize(msg.sender, address(0)); + + return mirror; + } + + function createProgramWithDecoder(address _decoderImpl, bytes32 _codeId, bytes32 _salt) external returns (address) { - (address actorId, uint128 executableBalance) = _createProgramWithoutMessage(_codeId, _salt, _value); + address mirror = _createProgram(_codeId, _salt); + address decoder = _createDecoder(_decoderImpl, keccak256(abi.encodePacked(_codeId, _salt)), mirror); - IMirror(actorId).initMessage(msg.sender, _payload, _value, executableBalance); + IMirror(mirror).initialize(msg.sender, decoder); - return actorId; + return mirror; } - function createProgramWithDecoder( - address _decoderImpl, - bytes32 _codeId, - bytes32 _salt, - bytes calldata _payload, - uint128 _value - ) external returns (address) { - (address actorId, uint128 executableBalance) = _createProgramWithoutMessage(_codeId, _salt, _value); + // # Validators calls. - IMirror mirrorInstance = IMirror(actorId); + /// @dev Set validators for the next era. + function commitValidators(Gear.ValidatorsCommitment calldata commitment, bytes[] calldata signatures) external { + Storage storage router = _router(); - mirrorInstance.createDecoder(_decoderImpl, keccak256(abi.encodePacked(_codeId, _salt))); + uint256 currentEraIndex = (block.timestamp - router.genesisBlock.timestamp) / router.timelines.era; - mirrorInstance.initMessage(msg.sender, _payload, _value, executableBalance); + require(commitment.eraIndex == currentEraIndex + 1, "commitment era index is not next era index"); - return actorId; + uint256 nextEraStart = router.genesisBlock.timestamp + router.timelines.era * commitment.eraIndex; + require(block.timestamp >= nextEraStart - router.timelines.election, "election is not yet started"); + + // Maybe free slot for new validators: + Gear.Validators storage _validators = Gear.previousEraValidators(router); + require(_validators.useFromTimestamp < block.timestamp, "looks like validators for next era are already set"); + + bytes32 commitmentHash = Gear.validatorsCommitmentHash(commitment); + require( + Gear.validateSignatures(router, keccak256(abi.encodePacked(commitmentHash)), signatures), + "next era validators signatures verification failed" + ); + + _resetValidators(_validators, commitment.validators, nextEraStart); + + emit NextEraValidatorsCommitted(nextEraStart); } - // # Validators calls. function commitCodes(Gear.CodeCommitment[] calldata _codeCommitments, bytes[] calldata _signatures) external { Storage storage router = _router(); require(router.genesisBlock.hash != bytes32(0), "router genesis is zero; call `lookupGenesisHash()` first"); @@ -271,10 +325,7 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { /* Helper private functions */ - function _createProgramWithoutMessage(bytes32 _codeId, bytes32 _salt, uint128 _value) - private - returns (address, uint128) - { + function _createProgram(bytes32 _codeId, bytes32 _salt) private returns (address) { Storage storage router = _router(); require(router.genesisBlock.hash != bytes32(0), "router genesis is zero; call `lookupGenesisHash()` first"); @@ -283,11 +334,6 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { "code must be validated before program creation" ); - // By default get 10 WVara for executable balance. - uint128 executableBalance = 10_000_000_000_000; - - _retrieveValue(router, executableBalance + _value); - // Check for duplicate isn't necessary, because `Clones.cloneDeterministic` // reverts execution in case of address is already taken. address actorId = @@ -298,7 +344,15 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { emit ProgramCreated(actorId, _codeId); - return (actorId, executableBalance); + return actorId; + } + + function _createDecoder(address _implementation, bytes32 _salt, address _mirror) private returns (address) { + address decoder = Clones.cloneDeterministic(_implementation, _salt); + + IMirrorDecoder(decoder).initialize(_mirror); + + return decoder; } function _commitBlock(Storage storage router, Gear.BlockCommitment calldata _blockCommitment) @@ -317,13 +371,7 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { */ router.latestCommittedBlock = Gear.CommittedBlockInfo(_blockCommitment.hash, _blockCommitment.timestamp); - bytes memory transitionsHashes; - - for (uint256 i = 0; i < _blockCommitment.transitions.length; i++) { - Gear.StateTransition calldata stateTransition = _blockCommitment.transitions[i]; - - transitionsHashes = bytes.concat(transitionsHashes, _doStateTransition(stateTransition)); - } + bytes32 transitionsHashesHash = _commitTransitions(router, _blockCommitment.transitions); emit BlockCommitted(_blockCommitment.hash); @@ -332,91 +380,48 @@ contract Router is IRouter, OwnableUpgradeable, ReentrancyGuardTransient { _blockCommitment.timestamp, _blockCommitment.previousCommittedBlock, _blockCommitment.predecessorBlock, - keccak256(transitionsHashes) + transitionsHashesHash ); } - function _doStateTransition(Gear.StateTransition calldata _stateTransition) private returns (bytes32) { - Storage storage router = _router(); - - require( - router.protocolData.programs[_stateTransition.actorId] != 0, - "couldn't perform transition for unknown program" - ); - - IWrappedVara wrappedVaraActor = IWrappedVara(router.implAddresses.wrappedVara); - wrappedVaraActor.transfer(_stateTransition.actorId, _stateTransition.valueToReceive); - - IMirror mirrorActor = IMirror(_stateTransition.actorId); - - bytes memory valueClaimsBytes; - - for (uint256 i = 0; i < _stateTransition.valueClaims.length; i++) { - Gear.ValueClaim calldata claim = _stateTransition.valueClaims[i]; - - mirrorActor.valueClaimed(claim.messageId, claim.destination, claim.value); - - valueClaimsBytes = bytes.concat(valueClaimsBytes, Gear.valueClaimBytes(claim)); - } + function _commitTransitions(Storage storage router, Gear.StateTransition[] calldata _transitions) + private + returns (bytes32) + { + bytes memory transitionsHashes; - bytes memory messagesHashes; + for (uint256 i = 0; i < _transitions.length; i++) { + Gear.StateTransition calldata transition = _transitions[i]; - for (uint256 i = 0; i < _stateTransition.messages.length; i++) { - Gear.Message calldata message = _stateTransition.messages[i]; + require( + router.protocolData.programs[transition.actorId] != 0, "couldn't perform transition for unknown program" + ); - if (message.replyDetails.to == 0) { - mirrorActor.messageSent(message.id, message.destination, message.payload, message.value); - } else { - mirrorActor.replySent( - message.destination, - message.payload, - message.value, - message.replyDetails.to, - message.replyDetails.code - ); - } + IWrappedVara(router.implAddresses.wrappedVara).transfer(transition.actorId, transition.valueToReceive); - messagesHashes = bytes.concat(messagesHashes, Gear.messageHash(message)); - } + bytes32 transitionHash = IMirror(transition.actorId).performStateTransition(transition); - if (_stateTransition.inheritor != address(0)) { - mirrorActor.setInheritor(_stateTransition.inheritor); + transitionsHashes = bytes.concat(transitionsHashes, transitionHash); } - mirrorActor.updateState(_stateTransition.newStateHash); - - return Gear.stateTransitionHash( - _stateTransition.actorId, - _stateTransition.newStateHash, - _stateTransition.inheritor, - _stateTransition.valueToReceive, - keccak256(valueClaimsBytes), - keccak256(messagesHashes) - ); + return keccak256(transitionsHashes); } - function _retrieveValue(Storage storage router, uint128 _value) private { - bool success = IERC20(router.implAddresses.wrappedVara).transferFrom(msg.sender, address(this), _value); - - require(success, "failed to retrieve WVara"); - } - - function _setValidators(Storage storage router, address[] memory _validators) private { - require(router.validationSettings.validators.length == 0, "remove previous validators first"); - - for (uint256 i = 0; i < _validators.length; i++) { - router.validationSettings.validatorsKeyMap[_validators[i]] = true; + function _resetValidators( + Gear.Validators storage _validators, + address[] memory _newValidators, + uint256 _useFromTimestamp + ) private { + for (uint256 i = 0; i < _validators.list.length; i++) { + address _validator = _validators.list[i]; + _validators.map[_validator] = false; } - - router.validationSettings.validators = _validators; - } - - function _removeValidators(Storage storage router) private { - for (uint256 i = 0; i < router.validationSettings.validators.length; i++) { - delete router.validationSettings.validatorsKeyMap[router.validationSettings.validators[i]]; + for (uint256 i = 0; i < _newValidators.length; i++) { + address _validator = _newValidators[i]; + _validators.map[_validator] = true; } - - delete router.validationSettings.validators; + _validators.list = _newValidators; + _validators.useFromTimestamp = _useFromTimestamp; } function _router() private view returns (Storage storage router) { diff --git a/ethexe/contracts/src/libraries/Gear.sol b/ethexe/contracts/src/libraries/Gear.sol index e183dc9f22b..7e663d96f9a 100644 --- a/ethexe/contracts/src/libraries/Gear.sol +++ b/ethexe/contracts/src/libraries/Gear.sol @@ -18,12 +18,25 @@ library Gear { // 10 WVara tokens per compute second. uint128 public constant WVARA_PER_SECOND = 10_000_000_000_000; + struct Validators { + // TODO: After FROST multi signature applied - consider to remove validators map and list. + // Replace it with list hash. Any node can access the list of validators using this hash from other nodes. + mapping(address => bool) map; + address[] list; + uint256 useFromTimestamp; + } + struct AddressBook { address mirror; address mirrorProxy; address wrappedVara; } + struct ValidatorsCommitment { + address[] validators; + uint256 eraIndex; + } + struct BlockCommitment { bytes32 hash; uint48 timestamp; @@ -88,11 +101,15 @@ library Gear { Message[] messages; } + struct Timelines { + uint256 era; + uint256 election; + } + struct ValidationSettings { uint16 signingThresholdPercentage; - address[] validators; - // TODO: replace with one single pubkey and validators amount. - mapping(address => bool) validatorsKeyMap; + Validators validators0; + Validators validators1; } struct ValueClaim { @@ -101,6 +118,10 @@ library Gear { uint128 value; } + function validatorsCommitmentHash(Gear.ValidatorsCommitment memory commitment) internal pure returns (bytes32) { + return keccak256(abi.encodePacked(commitment.validators, commitment.eraIndex)); + } + function blockCommitmentHash( bytes32 hash, uint48 timestamp, @@ -164,12 +185,16 @@ library Gear { ); } + /// @dev Validates signatures of the given data hash. function validateSignatures(IRouter.Storage storage router, bytes32 _dataHash, bytes[] calldata _signatures) internal view returns (bool) { - uint256 threshold = validatorsThresholdOf(router.validationSettings); + Validators storage validators = currentEraValidators(router); + + uint256 threshold = + validatorsThreshold(validators.list.length, router.validationSettings.signingThresholdPercentage); bytes32 msgHash = address(this).toDataWithIntendedValidatorHash(abi.encodePacked(_dataHash)); uint256 validSignatures = 0; @@ -179,7 +204,7 @@ library Gear { address validator = msgHash.recover(signature); - if (router.validationSettings.validatorsKeyMap[validator]) { + if (validators.map[validator]) { if (++validSignatures == threshold) { return true; } @@ -189,9 +214,53 @@ library Gear { return false; } - function validatorsThresholdOf(ValidationSettings storage settings) internal view returns (uint256) { + function currentEraValidators(IRouter.Storage storage router) internal view returns (Validators storage) { + if (currentEraValidatorsStoredInValidators1(router)) { + return router.validationSettings.validators1; + } else { + return router.validationSettings.validators0; + } + } + + function previousEraValidators(IRouter.Storage storage router) internal view returns (Validators storage) { + if (currentEraValidatorsStoredInValidators1(router)) { + return router.validationSettings.validators0; + } else { + return router.validationSettings.validators1; + } + } + + /// @dev Returns whether current era validators are stored in `router.validationSettings.validators1`. + /// `false` means that current era validators are stored in `router.validationSettings.validators0`. + function currentEraValidatorsStoredInValidators1(IRouter.Storage storage router) internal view returns (bool) { + uint256 ts = block.timestamp; + uint256 ts0 = router.validationSettings.validators0.useFromTimestamp; + uint256 ts1 = router.validationSettings.validators1.useFromTimestamp; + + // Impossible case, because of implementation. + require(ts0 != ts1, "eras timestamp must not be equal"); + + bool ts1Greater = ts0 < ts1; + bool tsGE0 = ts0 <= ts; + bool tsGE1 = ts1 <= ts; + + // Both eras are in the future - impossible case because of implementation. + require(tsGE0 || tsGE1, "could not identify validators for current timestamp"); + + // Two impossible cases, because of math rules: + // 1) ts1Greater && !tsGE0 && tsGE1 + // 2) !ts1Greater && tsGE0 && !tsGE1 + + return ts1Greater && (tsGE0 == tsGE1); + } + + function validatorsThreshold(uint256 validatorsAmount, uint16 thresholdPercentage) + internal + pure + returns (uint256) + { // Dividing by 10000 to adjust for percentage - return (settings.validators.length * uint256(settings.signingThresholdPercentage) + 9999) / 10000; + return (validatorsAmount * uint256(thresholdPercentage) + 9999) / 10000; } function valueClaimBytes(ValueClaim memory claim) internal pure returns (bytes memory) { diff --git a/ethexe/contracts/test/Base.t.sol b/ethexe/contracts/test/Base.t.sol new file mode 100644 index 00000000000..9b6de315b4a --- /dev/null +++ b/ethexe/contracts/test/Base.t.sol @@ -0,0 +1,353 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.26; + +import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; +import "forge-std/Test.sol"; + +import {NetworkRegistry} from "symbiotic-core/src/contracts/NetworkRegistry.sol"; +import {POCBaseTest} from "symbiotic-core/test/POCBase.t.sol"; +import {IVaultConfigurator} from "symbiotic-core/src/interfaces/IVaultConfigurator.sol"; +import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; +import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; +import {IOperatorSpecificDelegator} from "symbiotic-core/src/interfaces/delegator/IOperatorSpecificDelegator.sol"; +import {IVetoSlasher} from "symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol"; +import {IBaseSlasher} from "symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol"; + +import {WrappedVara} from "../src/WrappedVara.sol"; +import {IMirror, Mirror} from "../src/Mirror.sol"; +import {MirrorProxy} from "../src/MirrorProxy.sol"; +import {IRouter, Router} from "../src/Router.sol"; +import {Middleware} from "../src/Middleware.sol"; +import {Gear} from "../src/libraries/Gear.sol"; + +contract Base is POCBaseTest { + using MessageHashUtils for address; + using EnumerableMap for EnumerableMap.AddressToUintMap; + + address public admin; + uint48 public eraDuration; + uint48 public electionDuration; + uint256 public blockDuration; + uint256 public maxValidators; + + Middleware public middleware; + WrappedVara public wrappedVara; + Router public router; + Mirror public mirror; + MirrorProxy public mirrorProxy; + + function setUp() public virtual override { + revert("Must not be called"); + } + + function setUpWrappedVara() internal { + require(admin != address(0), "Base: admin must be initialized"); + + vm.startPrank(admin); + { + wrappedVara = WrappedVara( + Upgrades.deployTransparentProxy( + "WrappedVara.sol", address(admin), abi.encodeCall(WrappedVara.initialize, (admin)) + ) + ); + } + vm.stopPrank(); + } + + function setUpMiddleware() internal { + require(admin != address(0), "Base: admin must be initialized"); + require(address(wrappedVara) != address(0), "Base: wrappedVara should be initialized"); + require(eraDuration > 0, "Base: eraDuration should be greater than 0"); + + // For correct symbiotic work with time arithmetics + vm.warp(eraDuration * 100); + + // set up the symbiotic ecosystem + SYMBIOTIC_CORE_PROJECT_ROOT = "lib/symbiotic-core/"; + super.setUp(); + + Middleware.Config memory cfg = Middleware.Config({ + eraDuration: eraDuration, + minVaultEpochDuration: eraDuration * 2, + operatorGracePeriod: eraDuration * 2, + vaultGracePeriod: eraDuration * 2, + minVetoDuration: eraDuration / 3, + minSlashExecutionDelay: eraDuration / 3, + maxResolverSetEpochsDelay: type(uint256).max, + vaultRegistry: address(vaultFactory), + allowedVaultImplVersion: 1, + vetoSlasherImplType: 1, + operatorRegistry: address(operatorRegistry), + networkRegistry: address(networkRegistry), + networkOptIn: address(operatorNetworkOptInService), + middlewareService: address(networkMiddlewareService), + collateral: address(wrappedVara), + roleSlashRequester: admin, + roleSlashExecutor: admin, + vetoResolver: admin + }); + + middleware = new Middleware(cfg); + } + + function setUpRouter(address[] memory _validators) internal { + require(admin != address(0), "Base: admin must be initialized"); + require(address(wrappedVara) != address(0), "Base: wrappedVara should be initialized"); + require(eraDuration > 0, "Base: eraDuration should be greater than 0"); + require(electionDuration > 0, "Base: electionDuration should be greater than 0"); + require(blockDuration > 0, "Base: blockDuration should be greater than 0"); + + address wrappedVaraAddress = address(wrappedVara); + + address mirrorAddress = vm.computeCreateAddress(admin, vm.getNonce(admin) + 2); + address mirrorProxyAddress = vm.computeCreateAddress(admin, vm.getNonce(admin) + 3); + + vm.startPrank(admin, admin); + { + router = Router( + Upgrades.deployTransparentProxy( + "Router.sol", + admin, + abi.encodeCall( + Router.initialize, + ( + admin, + mirrorAddress, + mirrorProxyAddress, + wrappedVaraAddress, + uint256(eraDuration), + uint256(electionDuration), + _validators + ) + ) + ) + ); + } + vm.stopPrank(); + + rollBlocks(1); + router.lookupGenesisHash(); + + vm.startPrank(admin, admin); + { + mirror = new Mirror(); + mirrorProxy = new MirrorProxy(address(router)); + } + vm.stopPrank(); + + assertEq(router.mirrorImpl(), address(mirror)); + assertEq(router.mirrorProxyImpl(), address(mirrorProxy)); + assertEq(router.validators(), _validators); + assertEq(router.signingThresholdPercentage(), 6666); + assertTrue(router.areValidators(_validators)); + + vm.startPrank(admin); + { + wrappedVara.approve(address(router), type(uint256).max); + } + vm.stopPrank(); + } + + function createOperatorWithStake(address _operator, uint256 _stake) internal returns (address _vault) { + createOperator(_operator); + _vault = createVaultForOperator(_operator); + depositInto(_vault, _stake); + } + + function depositInto(address _vault, uint256 _amount) internal { + vm.startPrank(admin); + { + wrappedVara.approve(_vault, _amount); + IVault(_vault).deposit(admin, _amount); + } + vm.stopPrank(); + } + + function createVaultForOperator(address _operator) internal returns (address _vault) { + _vault = newVault(eraDuration * 2, _operator); + + vm.startPrank(_operator); + { + middleware.registerVault(_vault); + operatorVaultOptInService.optIn(_vault); + IOperatorSpecificDelegator(IVault(_vault).delegator()).setNetworkLimit( + middleware.subnetwork(), type(uint256).max + ); + } + vm.stopPrank(); + } + + function commitValidators(uint256[] memory _privateKeys, Gear.ValidatorsCommitment memory commitment) internal { + bytes memory message = bytes.concat(Gear.validatorsCommitmentHash(commitment)); + router.commitValidators(commitment, signBytes(_privateKeys, message)); + } + + function commitCode(uint256[] memory _privateKeys, Gear.CodeCommitment memory _commitment) internal { + Gear.CodeCommitment[] memory _commitments = new Gear.CodeCommitment[](1); + _commitments[0] = _commitment; + commitCodes(_privateKeys, _commitments); + } + + function commitCodes(uint256[] memory _privateKeys, Gear.CodeCommitment[] memory _commitments) internal { + bytes memory _codesBytes; + + for (uint256 i = 0; i < _commitments.length; i++) { + Gear.CodeCommitment memory _commitment = _commitments[i]; + _codesBytes = bytes.concat(_codesBytes, keccak256(abi.encodePacked(_commitment.id, _commitment.valid))); + } + + router.commitCodes(_commitments, signBytes(_privateKeys, _codesBytes)); + } + + function commitBlock(uint256[] memory _privateKeys, Gear.BlockCommitment memory _commitment) internal { + Gear.BlockCommitment[] memory _commitments = new Gear.BlockCommitment[](1); + _commitments[0] = _commitment; + commitBlocks(_privateKeys, _commitments); + } + + function commitBlocks(uint256[] memory _privateKeys, Gear.BlockCommitment[] memory _commitments) internal { + bytes memory _message; + + for (uint256 i = 0; i < _commitments.length; i++) { + Gear.BlockCommitment memory _commitment = _commitments[i]; + _message = bytes.concat(_message, blockCommitmentHash(_commitment)); + } + + router.commitBlocks(_commitments, signBytes(_privateKeys, _message)); + } + + function blockCommitmentHash(Gear.BlockCommitment memory _commitment) internal pure returns (bytes32) { + bytes memory _transitionsHashesBytes; + + for (uint256 i = 0; i < _commitment.transitions.length; i++) { + Gear.StateTransition memory _transition = _commitment.transitions[i]; + + bytes memory _valueClaimsBytes; + for (uint256 j = 0; j < _transition.valueClaims.length; j++) { + _valueClaimsBytes = bytes.concat(_valueClaimsBytes, Gear.valueClaimBytes(_transition.valueClaims[j])); + } + + bytes memory _messagesHashesBytes; + for (uint256 j = 0; j < _transition.messages.length; j++) { + _messagesHashesBytes = bytes.concat(_messagesHashesBytes, Gear.messageHash(_transition.messages[j])); + } + + _transitionsHashesBytes = bytes.concat( + _transitionsHashesBytes, + Gear.stateTransitionHash( + _transition.actorId, + _transition.newStateHash, + _transition.inheritor, + _transition.valueToReceive, + keccak256(_valueClaimsBytes), + keccak256(_messagesHashesBytes) + ) + ); + } + + return Gear.blockCommitmentHash( + _commitment.hash, + _commitment.timestamp, + _commitment.previousCommittedBlock, + _commitment.predecessorBlock, + keccak256(_transitionsHashesBytes) + ); + } + + function signBytes(uint256[] memory _privateKeys, bytes memory _message) + internal + view + returns (bytes[] memory signatures) + { + signatures = new bytes[](_privateKeys.length); + bytes32 _messageHash = address(router).toDataWithIntendedValidatorHash(abi.encodePacked(keccak256(_message))); + + for (uint256 i = 0; i < _privateKeys.length; i++) { + uint256 _key = _privateKeys[i]; + (uint8 v, bytes32 r, bytes32 s) = vm.sign(_key, _messageHash); + signatures[i] = abi.encodePacked(r, s, v); + } + } + + function createOperator(address _operator) internal { + vm.startPrank(_operator); + { + operatorRegistry.registerOperator(); + operatorNetworkOptInService.optIn(address(middleware)); + middleware.registerOperator(); + } + vm.stopPrank(); + } + + function newVault(uint48 _epochDuration, address _operator) internal returns (address _vault) { + address[] memory networkLimitSetRoleHolders = new address[](1); + networkLimitSetRoleHolders[0] = _operator; + + (_vault,,) = vaultConfigurator.create( + IVaultConfigurator.InitParams({ + version: 1, + owner: _operator, + vaultParams: abi.encode( + IVault.InitParams({ + collateral: address(wrappedVara), + burner: address(middleware), + epochDuration: _epochDuration, + depositWhitelist: false, + isDepositLimit: false, + depositLimit: 0, + defaultAdminRoleHolder: _operator, + depositWhitelistSetRoleHolder: _operator, + depositorWhitelistRoleHolder: _operator, + isDepositLimitSetRoleHolder: _operator, + depositLimitSetRoleHolder: _operator + }) + ), + delegatorIndex: 2, + delegatorParams: abi.encode( + IOperatorSpecificDelegator.InitParams({ + baseParams: IBaseDelegator.BaseParams({ + defaultAdminRoleHolder: _operator, + hook: address(0), + hookSetRoleHolder: _operator + }), + networkLimitSetRoleHolders: networkLimitSetRoleHolders, + operator: _operator + }) + ), + withSlasher: true, + slasherIndex: 1, + slasherParams: abi.encode( + IVetoSlasher.InitParams({ + baseParams: IBaseSlasher.BaseParams({isBurnerHook: false}), + vetoDuration: eraDuration / 2, + resolverSetEpochsDelay: 3 + }) + ) + }) + ); + } + + // Custom block hash implementation - is using for simulation of block chain in tests. + + function rollBlocks(uint256 _blocks) internal { + uint256 _blockNumber = vm.getBlockNumber(); + uint256 _blockTimestamp = vm.getBlockTimestamp(); + for (uint256 i = 0; i < _blocks; i++) { + _blockNumber += 1; + _blockTimestamp += blockDuration; + vm.roll(_blockNumber); + setBlockhash(_blockNumber); + vm.warp(_blockTimestamp); + } + } + + function setBlockhash(uint256 _blockNumber) internal { + vm.setBlockhash(_blockNumber, blockHash(_blockNumber)); + } + + function blockHash(uint256 _blockNumber) internal pure returns (bytes32) { + return keccak256(abi.encodePacked(_blockNumber)); + } +} diff --git a/ethexe/contracts/test/Middleware.t.sol b/ethexe/contracts/test/Middleware.t.sol index ea1ba74559a..5756e512156 100644 --- a/ethexe/contracts/test/Middleware.t.sol +++ b/ethexe/contracts/test/Middleware.t.sol @@ -5,132 +5,197 @@ import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap import {Time} from "@openzeppelin/contracts/utils/types/Time.sol"; import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; - import {Test, console} from "forge-std/Test.sol"; +import {Vm} from "forge-std/Vm.sol"; + import {NetworkRegistry} from "symbiotic-core/src/contracts/NetworkRegistry.sol"; import {POCBaseTest} from "symbiotic-core/test/POCBase.t.sol"; import {IVaultConfigurator} from "symbiotic-core/src/interfaces/IVaultConfigurator.sol"; import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; import {IOperatorSpecificDelegator} from "symbiotic-core/src/interfaces/delegator/IOperatorSpecificDelegator.sol"; +import {IVetoSlasher} from "symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol"; +import {IBaseSlasher} from "symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol"; import {Middleware} from "../src/Middleware.sol"; import {WrappedVara} from "../src/WrappedVara.sol"; import {MapWithTimeData} from "../src/libraries/MapWithTimeData.sol"; +import {Base} from "./Base.t.sol"; -contract MiddlewareTest is Test { +contract MiddlewareTest is Base { using MessageHashUtils for address; - uint48 eraDuration = 1000; - address public owner; - POCBaseTest public sym; - Middleware public middleware; - WrappedVara public wrappedVara; + POCBaseTest private sym; - function setUp() public { - sym = new POCBaseTest(); - sym.setUp(); + function setUp() public override { + admin = 0x116B4369a90d2E9DA6BD7a924A23B164E10f6FE9; + eraDuration = 1000; - owner = address(this); + setUpWrappedVara(); + setUpMiddleware(); - wrappedVara = WrappedVara( - Upgrades.deployTransparentProxy("WrappedVara.sol", owner, abi.encodeCall(WrappedVara.initialize, (owner))) - ); - - wrappedVara.mint(owner, 1_000_000); - - middleware = new Middleware( - eraDuration, - address(sym.vaultFactory()), - address(sym.delegatorFactory()), - address(sym.slasherFactory()), - address(sym.operatorRegistry()), - address(sym.networkRegistry()), - address(sym.operatorNetworkOptInService()), - address(wrappedVara) - ); + // For understanding where symbiotic ecosystem is using + sym = POCBaseTest(address(this)); } + // TODO: sync with the latest version of the middleware function test_constructor() public view { - assertEq(uint256(middleware.ERA_DURATION()), eraDuration); - assertEq(uint256(middleware.GENESIS_TIMESTAMP()), Time.timestamp()); - assertEq(uint256(middleware.OPERATOR_GRACE_PERIOD()), eraDuration * 2); - assertEq(uint256(middleware.VAULT_GRACE_PERIOD()), eraDuration * 2); - assertEq(uint256(middleware.VAULT_MIN_EPOCH_DURATION()), eraDuration * 2); - assertEq(middleware.VAULT_FACTORY(), address(sym.vaultFactory())); - assertEq(middleware.DELEGATOR_FACTORY(), address(sym.delegatorFactory())); - assertEq(middleware.SLASHER_FACTORY(), address(sym.slasherFactory())); - assertEq(middleware.OPERATOR_REGISTRY(), address(sym.operatorRegistry())); - assertEq(middleware.COLLATERAL(), address(wrappedVara)); - - sym.networkRegistry().isEntity(address(middleware)); + assertTrue(sym.networkRegistry().isEntity(address(middleware))); + assertEq(sym.networkMiddlewareService().middleware(address(middleware)), address(middleware)); } - function test_registerOperator() public { - // Register operator - vm.startPrank(address(0x1)); - sym.operatorRegistry().registerOperator(); - sym.operatorNetworkOptInService().optIn(address(middleware)); - middleware.registerOperator(); + function test_election() public { + address[] memory operators = new address[](5); + address[] memory vaults = new address[](operators.length); - // Try to register operator again - vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyAdded.selector)); - middleware.registerOperator(); + for (uint256 i = 0; i < operators.length; i++) { + operators[i] = address(uint160(i) + 0x1000); + vaults[i] = createOperatorWithStake(operators[i], 1_000); + } - // Try to register abother operator without registering it in symbiotic - vm.startPrank(address(0x2)); - vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorDoesNotExist.selector)); - middleware.registerOperator(); + // Additional deposit for some operators + depositInto(vaults[1], 1_000); + depositInto(vaults[3], 4_000); - // Try to register operator without opting in network - sym.operatorRegistry().registerOperator(); - vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorDoesNotOptIn.selector)); - middleware.registerOperator(); + vm.warp(vm.getBlockTimestamp() + 1000); - // Now must be possible to register operator - sym.operatorNetworkOptInService().optIn(address(middleware)); - middleware.registerOperator(); + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.makeElectionAt(uint48(vm.getBlockTimestamp()), 10); - // Disable operator and the enable it - middleware.disableOperator(); - middleware.enableOperator(); + vm.expectRevert(); + middleware.makeElectionAt(uint48(vm.getBlockTimestamp()) - 1, 0); - // Try to enable operator again - vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyEnabled.selector)); - middleware.enableOperator(); + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 1); + assertEq(res.length, 1); + assertEq(res[0], operators[3]); + } - // Try to disable operator twice - middleware.disableOperator(); - vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.NotEnabled.selector)); - middleware.disableOperator(); + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 2); + assertEq(res.length, 2); + assertEq(res[0], operators[3]); + assertEq(res[1], operators[1]); + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 3); + assertEq(res.length, 3); + assertEq(res[0], operators[3]); + assertEq(res[1], operators[1]); + assertTrue(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 4); + assertEq(res.length, 4); + assertEq(res[0], operators[3]); + assertEq(res[1], operators[1]); + assertTrue(res[2] == operators[0] || res[2] == operators[2] || res[2] == operators[4]); + assertTrue((res[3] == operators[0] || res[3] == operators[2] || res[3] == operators[4]) && res[3] != res[2]); + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 5); + assertEq(res.length, operators.length); + // In that case not sorted by stake + for (uint256 i; i < operators.length; i++) { + assertEq(res[i], operators[i]); + } + } + + { + address[] memory res = middleware.makeElectionAt(uint48(vm.getBlockTimestamp() - 1), 6); + assertEq(res.length, operators.length); + // In that case not sorted by stake + for (uint256 i; i < operators.length; i++) { + assertEq(res[i], operators[i]); + } + } + } + + // TODO: split to multiple tests + function test_registerOperator() public { + // Register operator + vm.startPrank(address(0x1)); + { + sym.operatorRegistry().registerOperator(); + sym.operatorNetworkOptInService().optIn(address(middleware)); + middleware.registerOperator(); + + // Try to register operator again + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyAdded.selector)); + middleware.registerOperator(); + } + vm.stopPrank(); - // Try to unregister operator - failed because operator is not disabled for enough time - vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorGracePeriodNotPassed.selector)); - middleware.unregisterOperator(address(0x2)); + // Try to register another operator without registering it in symbiotic + vm.startPrank(address(0x2)); + { + vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorDoesNotExist.selector)); + middleware.registerOperator(); + + // Try to register operator without opting in network + sym.operatorRegistry().registerOperator(); + vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorDoesNotOptIn.selector)); + middleware.registerOperator(); + + // Now must be possible to register operator + sym.operatorNetworkOptInService().optIn(address(middleware)); + middleware.registerOperator(); + + // Disable operator and then enable it + middleware.disableOperator(); + middleware.enableOperator(); + + // Try to enable operator again + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.AlreadyEnabled.selector)); + middleware.enableOperator(); + + // Try to disable operator twice + middleware.disableOperator(); + vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.NotEnabled.selector)); + middleware.disableOperator(); + + // Try to unregister operator - failed because operator is not disabled for enough time + vm.expectRevert(abi.encodeWithSelector(Middleware.OperatorGracePeriodNotPassed.selector)); + middleware.unregisterOperator(address(0x2)); + } + vm.stopPrank(); // Wait for grace period and unregister operator from other address vm.startPrank(address(0x3)); - vm.warp(vm.getBlockTimestamp() + eraDuration * 2); - middleware.unregisterOperator(address(0x2)); + { + vm.warp(vm.getBlockTimestamp() + middleware.operatorGracePeriod()); + middleware.unregisterOperator(address(0x2)); + } + vm.stopPrank(); } + // TODO: split to multiple tests + // TODO: check vault has valid network params function test_registerVault() public { - sym.operatorRegistry().registerOperator(); - address vault = _newVault(eraDuration * 2, owner); + address _operator = address(0x1); + + vm.startPrank(_operator); + { + sym.operatorRegistry().registerOperator(); + } + vm.stopPrank(); + + address vault = newVault(eraDuration * 2, _operator); + + // Note: because we do not use startPrank - vault registration owner is address(this) // Register vault middleware.registerVault(vault); - // Try to register vault with zero address - vm.expectRevert(abi.encodeWithSelector(Middleware.ZeroVaultAddress.selector)); - middleware.registerVault(address(0x0)); - // Try to register unknown vault vm.expectRevert(abi.encodeWithSelector(Middleware.NotKnownVault.selector)); - middleware.registerVault(address(0x1)); + middleware.registerVault(address(0xdead)); // Try to register vault with wrong epoch duration - address vault2 = _newVault(eraDuration, owner); + address vault2 = newVault(eraDuration, _operator); vm.expectRevert(abi.encodeWithSelector(Middleware.VaultWrongEpochDuration.selector)); middleware.registerVault(vault2); @@ -148,19 +213,17 @@ contract MiddlewareTest is Test { vm.expectRevert(abi.encodeWithSelector(MapWithTimeData.NotEnabled.selector)); middleware.disableVault(vault); + vm.startPrank(address(0xdead)); { - vm.startPrank(address(0x1)); - - // Try to enable vault not from owner + // Try to enable vault not from vault owner vm.expectRevert(abi.encodeWithSelector(Middleware.NotVaultOwner.selector)); middleware.enableVault(vault); - // Try to disable vault not from owner + // Try to disable vault not from vault owner vm.expectRevert(abi.encodeWithSelector(Middleware.NotVaultOwner.selector)); middleware.disableVault(vault); - - vm.stopPrank(); } + vm.stopPrank(); // Try to unregister vault - failed because vault is not disabled for enough time vm.expectRevert(abi.encodeWithSelector(Middleware.VaultGracePeriodNotPassed.selector)); @@ -170,208 +233,364 @@ contract MiddlewareTest is Test { vm.warp(vm.getBlockTimestamp() + eraDuration * 2); middleware.unregisterVault(vault); - // Register vault again, disable and unregister it not by owner + // Register vault again, disable and unregister it not by vault owner middleware.registerVault(vault); middleware.disableVault(vault); - vm.startPrank(address(0x1)); - vm.warp(vm.getBlockTimestamp() + eraDuration * 2); - middleware.unregisterVault(vault); + vm.startPrank(address(0xdead)); + { + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); + middleware.unregisterVault(vault); + } vm.stopPrank(); // Try to enable unknown vault - vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0x1))); - middleware.enableVault(address(0x1)); + vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0xdead))); + middleware.enableVault(address(0xdead)); // Try to disable unknown vault - vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0x1))); - middleware.disableVault(address(0x1)); + vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0xdead))); + middleware.disableVault(address(0xdead)); // Try to unregister unknown vault - vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0x1))); - middleware.unregisterVault(address(0x1)); + vm.expectRevert(abi.encodeWithSelector(EnumerableMap.EnumerableMapNonexistentKey.selector, address(0xdead))); + middleware.unregisterVault(address(0xdead)); } - function test_operatorStake() public { - address operator1 = address(0x1); - address operator2 = address(0x2); + function test_stake() public { + (address operator1, address operator2,,, uint256 stake1, uint256 stake2) = prepareTwoOperators(); - _registerOperator(operator1); - _registerOperator(operator2); + uint48 ts = uint48(vm.getBlockTimestamp() - 1); - address vault1 = _createVaultForOperator(operator1); - address vault2 = _createVaultForOperator(operator2); + // Check operator stake after depositing + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); + assertEq(middleware.getOperatorStakeAt(operator2, ts), stake2); - uint256 stake1 = 1_000; - uint256 stake2 = 2_000; - uint256 stake3 = 3_000; - - _depositFromInVault(owner, vault1, stake1); - _depositFromInVault(owner, vault2, stake2); + // Check active operators + (address[] memory activeOperators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); + assertEq(activeOperators.length, 2); + assertEq(stakes.length, 2); + assertEq(activeOperators[0], operator1); + assertEq(activeOperators[1], operator2); + assertEq(stakes[0], stake1); + assertEq(stakes[1], stake2); + } - { - // Check operator stake after depositing - uint48 ts = uint48(vm.getBlockTimestamp()); - vm.warp(vm.getBlockTimestamp() + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); - assertEq(middleware.getOperatorStakeAt(operator2, ts), stake2); - (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); - assertEq(active_operators.length, 2); - assertEq(stakes.length, 2); - assertEq(active_operators[0], operator1); - assertEq(active_operators[1], operator2); - assertEq(stakes[0], stake1); - assertEq(stakes[1], stake2); - } + function test_stakeOperatorWithTwoVaults() public { + (address operator1,, address vault1,, uint256 stake1,) = prepareTwoOperators(); // Create one more vault for operator1 - address vault3 = _createVaultForOperator(operator1); + address vault3 = createVaultForOperator(operator1); - { - // Check that vault creation doesn't affect operator stake without deposit - uint48 ts = uint48(vm.getBlockTimestamp()); - vm.warp(vm.getBlockTimestamp() + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); - } + // Check that vault creation doesn't affect operator stake without deposit + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1); - { - // Check after depositing to new vault - _depositFromInVault(owner, vault3, stake3); - uint48 ts = uint48(vm.getBlockTimestamp()); - vm.warp(vm.getBlockTimestamp() + 1); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1 + stake3); - } + // Check after depositing to new vault + uint256 stake3 = 3_000; + depositInto(vault3, stake3); + ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + 1); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake1 + stake3); + // Disable vault1 and check operator1 stake + vm.startPrank(operator1); { - // Disable vault1 and check operator1 stake - // Disable is not immediate, so we need to check for the next block ts - _disableVault(operator1, vault1); - uint48 ts = uint48(vm.getBlockTimestamp()) + 1; - vm.warp(vm.getBlockTimestamp() + 2); - assertEq(middleware.getOperatorStakeAt(operator1, ts), stake3); + middleware.disableVault(vault1); } + vm.stopPrank(); + + // Disable is not immediate, so we need to check for the next block ts + ts = uint48(vm.getBlockTimestamp()) + 1; + vm.warp(vm.getBlockTimestamp() + 2); + assertEq(middleware.getOperatorStakeAt(operator1, ts), stake3); + } + + function test_stakeDisabledOperator() public { + (address operator1, address operator2,,,, uint256 stake2) = prepareTwoOperators(); + // Disable operator1 and check operator1 stake is 0 + vm.startPrank(operator1); { - // Disable operator1 and check operator1 stake is 0 - _disableOperator(operator1); - uint48 ts = uint48(vm.getBlockTimestamp()) + 1; - vm.warp(vm.getBlockTimestamp() + 2); - assertEq(middleware.getOperatorStakeAt(operator1, ts), 0); - - // Check that operator1 is not in active operators list - (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); - assertEq(active_operators.length, 1); - assertEq(stakes.length, 1); - assertEq(active_operators[0], operator2); - assertEq(stakes[0], stake2); + middleware.disableOperator(); } + vm.stopPrank(); + + // Disable is not immediate, so we need to check for the next block ts + uint48 ts = uint48(vm.getBlockTimestamp()) + 1; + vm.warp(vm.getBlockTimestamp() + 2); + assertEq(middleware.getOperatorStakeAt(operator1, ts), 0); + + // Check that operator1 is not in active operators list + (address[] memory active_operators, uint256[] memory stakes) = middleware.getActiveOperatorsStakeAt(ts); + assertEq(active_operators.length, 1); + assertEq(stakes.length, 1); + assertEq(active_operators[0], operator2); + assertEq(stakes[0], stake2); + } + + function test_stakeTooOldTimestamp() public { + (address operator1,,,,,) = prepareTwoOperators(); + + // Try to get stake for too old timestamp + uint48 ts = uint48(vm.getBlockTimestamp()); + vm.warp(vm.getBlockTimestamp() + eraDuration * 2); + vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); + middleware.getOperatorStakeAt(operator1, ts); + } + + function test_stakeCurrentTimestamp() public { + (address operator1,,,,,) = prepareTwoOperators(); // Try to get stake for current timestamp vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp())); + middleware.getOperatorStakeAt(operator1, uint48(vm.getBlockTimestamp())); + } + + function test_stakeFutureTimestamp() public { + (address operator1,,,,,) = prepareTwoOperators(); // Try to get stake for future timestamp vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp() + 1)); + middleware.getOperatorStakeAt(operator1, uint48(vm.getBlockTimestamp() + 1)); + } - // Try to get stake for too old timestamp - vm.warp(vm.getBlockTimestamp() + eraDuration * 2); - vm.expectRevert(abi.encodeWithSelector(Middleware.IncorrectTimestamp.selector)); - middleware.getOperatorStakeAt(operator2, uint48(vm.getBlockTimestamp())); + function test_slash() public { + (address operator1,, address vault1,, uint256 stake1,) = prepareTwoOperators(); + + // Make slash request for operator1 in vault1 + uint256 slashIndex = requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + uint48 _vetoDeadline = vetoDeadline(IVault(vault1).slasher(), slashIndex); + assertEq(_vetoDeadline, uint48(vm.getBlockTimestamp() + eraDuration / 2)); + + // Try to execute slash before veto deadline + vm.warp(_vetoDeadline - 1); + vm.expectRevert(IVetoSlasher.VetoPeriodNotEnded.selector); + executeSlash(vault1, slashIndex); + + // Execute slash when ready + vm.warp(_vetoDeadline); + executeSlash(vault1, slashIndex); + + // Check that operator1 stake is decreased + vm.warp(_vetoDeadline + 1); + assertEq(middleware.getOperatorStakeAt(operator1, _vetoDeadline), stake1 - 100); + + // Try to execute slash twice + vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); + executeSlash(vault1, slashIndex); } - function _disableOperator(address operator) private { - vm.startPrank(operator); - middleware.disableOperator(); - vm.stopPrank(); + function test_slashRequestUnknownOperator() public { + (,, address vault1,,,) = prepareTwoOperators(); + + // Try to request slash from unknown operator + vm.warp(vm.getBlockTimestamp() + 1); + requestSlash( + address(0xdead), uint48(vm.getBlockTimestamp() - 1), vault1, 100, Middleware.NotRegisteredOperator.selector + ); } - function _disableVault(address vault_owner, address vault) private { - vm.startPrank(vault_owner); - middleware.disableVault(vault); - vm.stopPrank(); + function test_slashRequestUnknownVault() public { + (address operator1,,,,,) = prepareTwoOperators(); + + // Try to request slash from unknown vault + requestSlash( + operator1, uint48(vm.getBlockTimestamp() - 1), address(0xdead), 100, Middleware.NotRegisteredVault.selector + ); } - function _depositFromInVault(address from, address vault, uint256 amount) private { - vm.startPrank(from); - wrappedVara.approve(vault, amount); - IVault(vault).deposit(from, amount); - vm.stopPrank(); + function test_slashRequestOnVaultWithNoStake() public { + (address operator1,,, address vault2,,) = prepareTwoOperators(); + + // Try to request slash on vault where it has no stake + requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault2, 10, IVetoSlasher.InsufficientSlash.selector); } - function _registerOperator(address operator) private { - vm.startPrank(operator); - sym.operatorRegistry().registerOperator(); - sym.operatorNetworkOptInService().optIn(address(middleware)); - middleware.registerOperator(); - vm.stopPrank(); + function test_slashAfterSlashPeriod() public { + (address operator1,, address vault1,,,) = prepareTwoOperators(); + + // Make slash request for operator1 in vault1 + uint256 slashIndex = requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + + // Try to slash after slash period + vm.warp(uint48(vm.getBlockTimestamp()) + IVault(vault1).epochDuration()); + vm.expectRevert(IVetoSlasher.SlashPeriodEnded.selector); + executeSlash(vault1, slashIndex); } - function _createVaultForOperator(address operator) private returns (address vault) { - // Create vault - vault = _newVault(eraDuration * 2, operator); - { - vm.startPrank(operator); + function test_slashOneOperatorTwoVaults() public { + (address operator1,, address vault1, address vault2,,) = prepareTwoOperators(); - // Register vault in middleware - middleware.registerVault(vault); + // Try request slashes for one operator, but 2 vaults + Middleware.VaultSlashData[] memory vaults = new Middleware.VaultSlashData[](2); + vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); + vaults[1] = Middleware.VaultSlashData({vault: vault2, amount: 20}); - // Operator opt-in vault - sym.operatorVaultOptInService().optIn(vault); + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](1); + slashes[0] = Middleware.SlashData({operator: operator1, ts: uint48(vm.getBlockTimestamp() - 1), vaults: vaults}); - // Set initial network limit - IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit( - middleware.SUBNETWORK(), type(uint256).max - ); + requestSlash(slashes, IVetoSlasher.InsufficientSlash.selector); - vm.stopPrank(); + // Make one more vault for operator1 + address vault3 = createVaultForOperator(operator1); + depositInto(vault3, 3_000); + + vm.warp(vm.getBlockTimestamp() + 1); + + // Request slashes with correct vaults + vaults[1] = Middleware.VaultSlashData({vault: vault3, amount: 30}); + slashes[0] = Middleware.SlashData({operator: operator1, ts: uint48(vm.getBlockTimestamp() - 1), vaults: vaults}); + requestSlash(slashes, 0); + } + + function test_slashTwoOperatorsTwoVaults() public { + (address operator1, address operator2, address vault1, address vault2,,) = prepareTwoOperators(); + + // Request slashes for 2 operators with corresponding vaults + Middleware.VaultSlashData[] memory operator1_vaults = new Middleware.VaultSlashData[](1); + operator1_vaults[0] = Middleware.VaultSlashData({vault: vault1, amount: 10}); + + Middleware.VaultSlashData[] memory operator2_vaults = new Middleware.VaultSlashData[](1); + operator2_vaults[0] = Middleware.VaultSlashData({vault: vault2, amount: 20}); + + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](2); + slashes[0] = Middleware.SlashData({ + operator: operator1, + ts: uint48(vm.getBlockTimestamp() - 1), + vaults: operator1_vaults + }); + slashes[1] = Middleware.SlashData({ + operator: operator2, + ts: uint48(vm.getBlockTimestamp() - 1), + vaults: operator2_vaults + }); + + requestSlash(slashes, 0); + } + + function test_slashVeto() public { + (address operator1,, address vault1,,,) = prepareTwoOperators(); + + // Make slash request for operator1 in vault1 + uint256 slashIndex = requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + uint48 _vetoDeadline = vetoDeadline(IVault(vault1).slasher(), slashIndex); + + // Slash resolver is admin + vm.startPrank(admin); + { + IVetoSlasher slasher = IVetoSlasher(IVault(vault1).slasher()); + + // Try to execute slash after veto deadline + vm.warp(_vetoDeadline); + vm.expectRevert(IVetoSlasher.VetoPeriodEnded.selector); + slasher.vetoSlash(slashIndex, new bytes(0)); + + // Veto slash + vm.warp(_vetoDeadline - 1); + slasher.vetoSlash(slashIndex, new bytes(0)); + + // Try to veto the slash after veto is done + vm.expectRevert(IVetoSlasher.SlashRequestCompleted.selector); + slasher.vetoSlash(slashIndex, new bytes(0)); } + vm.stopPrank(); + } + + function test_slashExecutionUnregisteredVault() public { + (address operator1,, address vault1,,,) = prepareTwoOperators(); + + // Make slash request for operator1 in vault1 + uint256 slashIndex = requestSlash(operator1, uint48(vm.getBlockTimestamp() - 1), vault1, 100, 0); + + // Try to execute slash for unknown vault + vm.expectRevert(Middleware.NotRegisteredVault.selector); + executeSlash(address(0xdead), slashIndex); + } + + function prepareTwoOperators() + private + returns (address operator1, address operator2, address vault1, address vault2, uint256 stake1, uint256 stake2) + { + operator1 = address(0x1); + operator2 = address(0x2); + + stake1 = 1_000; + stake2 = 2_000; + + vault1 = createOperatorWithStake(operator1, stake1); + vault2 = createOperatorWithStake(operator2, stake2); + + vm.warp(vm.getBlockTimestamp() + 1); } - function _setNetworkLimit(address vault, address operator, uint256 limit) private { - vm.startPrank(address(operator)); - IOperatorSpecificDelegator(IVault(vault).delegator()).setNetworkLimit(middleware.SUBNETWORK(), limit); + function vetoDeadline(address slasher, uint256 slash_index) private view returns (uint48) { + (,,,, uint48 _vetoDeadline,) = IVetoSlasher(slasher).slashRequests(slash_index); + return _vetoDeadline; + } + + function executeSlash(address vault, uint256 index) private { + Middleware.SlashIdentifier[] memory slashes = new Middleware.SlashIdentifier[](1); + slashes[0] = Middleware.SlashIdentifier({vault: vault, index: index}); + + vm.startPrank(admin); + { + middleware.executeSlash(slashes); + } vm.stopPrank(); } - function _newVault(uint48 epochDuration, address operator) private returns (address vault) { - address[] memory networkLimitSetRoleHolders = new address[](1); - networkLimitSetRoleHolders[0] = operator; - - (vault,,) = sym.vaultConfigurator().create( - IVaultConfigurator.InitParams({ - version: sym.vaultFactory().lastVersion(), - owner: owner, - vaultParams: abi.encode( - IVault.InitParams({ - collateral: address(wrappedVara), - burner: address(middleware), - epochDuration: epochDuration, - depositWhitelist: false, - isDepositLimit: false, - depositLimit: 0, - defaultAdminRoleHolder: owner, - depositWhitelistSetRoleHolder: owner, - depositorWhitelistRoleHolder: owner, - isDepositLimitSetRoleHolder: owner, - depositLimitSetRoleHolder: owner - }) - ), - delegatorIndex: 2, - delegatorParams: abi.encode( - IOperatorSpecificDelegator.InitParams({ - baseParams: IBaseDelegator.BaseParams({ - defaultAdminRoleHolder: operator, - hook: address(0), - hookSetRoleHolder: operator - }), - networkLimitSetRoleHolders: networkLimitSetRoleHolders, - operator: operator - }) - ), - withSlasher: false, - slasherIndex: 0, - slasherParams: bytes("") - }) - ); + function requestSlash(address operator, uint48 ts, address vault, uint256 amount, bytes4 err) + private + returns (uint256 slashIndex) + { + Middleware.VaultSlashData[] memory vaults = new Middleware.VaultSlashData[](1); + vaults[0] = Middleware.VaultSlashData({vault: vault, amount: amount}); + + Middleware.SlashData[] memory slashes = new Middleware.SlashData[](1); + slashes[0] = Middleware.SlashData({operator: operator, ts: ts, vaults: vaults}); + + slashIndex = requestSlash(slashes, err)[0]; + assertNotEq(slashIndex, type(uint256).max); + } + + function requestSlash(Middleware.SlashData[] memory slashes, bytes4 err) + private + returns (uint256[] memory slashIndexes) + { + uint256 len = 0; + for (uint256 i = 0; i < slashes.length; i++) { + len += slashes[i].vaults.length; + } + + slashIndexes = new uint256[](len); + + vm.recordLogs(); + if (err != 0) { + vm.startPrank(admin); + { + vm.expectRevert(err); + middleware.requestSlash(slashes); + } + vm.stopPrank(); + + return slashIndexes; + } else { + vm.startPrank(admin); + { + middleware.requestSlash(slashes); + } + vm.stopPrank(); + } + Vm.Log[] memory logs = vm.getRecordedLogs(); + + uint16 k = 0; + for (uint256 i = 0; i < logs.length; i++) { + Vm.Log memory log = logs[i]; + bytes32 eventSignature = log.topics[0]; + if (eventSignature == IVetoSlasher.RequestSlash.selector) { + slashIndexes[k++] = uint256(log.topics[1]); + } + } } } diff --git a/ethexe/contracts/test/POC.t.sol b/ethexe/contracts/test/POC.t.sol new file mode 100644 index 00000000000..7e7d791e543 --- /dev/null +++ b/ethexe/contracts/test/POC.t.sol @@ -0,0 +1,225 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.26; + +import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import {EnumerableMap} from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; +import "forge-std/Test.sol"; + +import {IVaultConfigurator} from "symbiotic-core/src/interfaces/IVaultConfigurator.sol"; +import {IVault} from "symbiotic-core/src/interfaces/vault/IVault.sol"; +import {IBaseDelegator} from "symbiotic-core/src/interfaces/delegator/IBaseDelegator.sol"; +import {IOperatorSpecificDelegator} from "symbiotic-core/src/interfaces/delegator/IOperatorSpecificDelegator.sol"; +import {IVetoSlasher} from "symbiotic-core/src/interfaces/slasher/IVetoSlasher.sol"; +import {IBaseSlasher} from "symbiotic-core/src/interfaces/slasher/IBaseSlasher.sol"; + +import {Gear} from "../src/libraries/Gear.sol"; +import {Base} from "./Base.t.sol"; +import {IMirror} from "../src/Mirror.sol"; +import {IRouter} from "../src/IRouter.sol"; + +contract POCTest is Base { + using MessageHashUtils for address; + using EnumerableMap for EnumerableMap.AddressToUintMap; + + EnumerableMap.AddressToUintMap private operators; + address[] private vaults; + + function setUp() public override { + admin = 0x116B4369a90d2E9DA6BD7a924A23B164E10f6FE9; + eraDuration = 400; + electionDuration = 100; + blockDuration = 12; + maxValidators = 3; + + setUpWrappedVara(); + + setUpMiddleware(); + + for (uint256 i = 0; i < 10; i++) { + (address _addr, uint256 _key) = makeAddrAndKey(vm.toString(i + 1)); + operators.set(_addr, _key); + address _vault = createOperatorWithStake(_addr, (i + 1) * 1000); + vaults.push(_vault); + } + + vm.warp(vm.getBlockTimestamp() + 1); + address[] memory _validators = middleware.makeElectionAt(uint48(vm.getBlockTimestamp()) - 1, maxValidators); + + setUpRouter(_validators); + + // Change slash requester and executor to router + // Note: just to check that it is possible to change them for now and do not affect the poc test + vm.startPrank(admin); + { + middleware.changeSlashRequester(address(router)); + middleware.changeSlashExecutor(address(router)); + } + vm.stopPrank(); + } + + function test_POC() public { + bytes32 _codeId = bytes32(uint256(1)); + bytes32 _blobTxHash = bytes32(uint256(2)); + + router.requestCodeValidation(_codeId, _blobTxHash); + + address[] memory _validators = router.validators(); + assertEq(_validators.length, maxValidators); + + uint256[] memory _privateKeys = new uint256[](_validators.length); + for (uint256 i = 0; i < _validators.length; i++) { + address _operator = _validators[i]; + _privateKeys[i] = operators.get(_operator); + } + + commitCode(_privateKeys, Gear.CodeCommitment(_codeId, true)); + + address _ping = deployPing(_privateKeys, _codeId); + IMirror actor = IMirror(_ping); + assertEq(router.latestCommittedBlockHash(), blockHash(vm.getBlockNumber() - 1)); + assertEq(actor.stateHash(), bytes32(uint256(1))); + assertEq(actor.nonce(), uint256(1)); + + doPingPong(_privateKeys, _ping); + assertEq(router.latestCommittedBlockHash(), blockHash(vm.getBlockNumber() - 1)); + assertEq(actor.stateHash(), bytes32(uint256(2))); + assertEq(actor.nonce(), uint256(2)); + + // Check that going to next era without re-election is ok and old validators are still valid. + rollBlocks(eraDuration / blockDuration); + doPingPong(_privateKeys, _ping); + assertEq(router.latestCommittedBlockHash(), blockHash(vm.getBlockNumber() - 1)); + assertEq(actor.stateHash(), bytes32(uint256(2))); + assertEq(actor.nonce(), uint256(3)); + + // Change validators stake and make re-election + depositInto(vaults[0], 10_000); + depositInto(vaults[1], 10_000); + depositInto(vaults[2], 10_000); + rollBlocks((eraDuration - electionDuration) / blockDuration); + _validators = middleware.makeElectionAt(uint48(vm.getBlockTimestamp()) - 1, maxValidators); + + commitValidators(_privateKeys, Gear.ValidatorsCommitment(_validators, 2)); + + for (uint256 i = 0; i < _validators.length; i++) { + address _operator = _validators[i]; + + // Check that election is correct + // Validators are sorted in descending order + (address expected,) = makeAddrAndKey(vm.toString(_validators.length - i)); + assertEq(_operator, expected); + + _privateKeys[i] = operators.get(_operator); + } + + // Go to a new era and commit from new validators + rollBlocks(electionDuration / blockDuration); + doPingPong(_privateKeys, _ping); + assertEq(router.latestCommittedBlockHash(), blockHash(vm.getBlockNumber() - 1)); + assertEq(actor.stateHash(), bytes32(uint256(2))); + assertEq(actor.nonce(), uint256(4)); + } + + function deployPing(uint256[] memory _privateKeys, bytes32 _codeId) private returns (address _ping) { + vm.startPrank(admin, admin); + { + vm.expectEmit(true, false, false, false); + emit IRouter.ProgramCreated(address(0), bytes32(uint256(1))); + _ping = router.createProgram(_codeId, "salt"); + IMirror(_ping).sendMessage("PING", 0); + } + vm.stopPrank(); + + uint48 _deploymentTimestamp = uint48(vm.getBlockTimestamp()); + bytes32 _deploymentBlock = blockHash(vm.getBlockNumber()); + + rollBlocks(1); + + Gear.Message[] memory _outgoingMessages = new Gear.Message[](1); + _outgoingMessages[0] = Gear.Message( + 0, // message id + admin, // destination + "PONG", // payload + 0, // value + Gear.ReplyDetails( + 0, // reply to + 0 // reply code + ) + ); + + Gear.StateTransition[] memory _transitions = new Gear.StateTransition[](1); + _transitions[0] = Gear.StateTransition( + _ping, // actor id + bytes32(uint256(1)), // new state hash + address(0), // inheritor + uint128(0), // value to receive + new Gear.ValueClaim[](0), // value claims + _outgoingMessages // messages + ); + + vm.expectEmit(true, false, false, false); + emit IMirror.Message(0, admin, "PONG", 0); + commitBlock( + _privateKeys, + Gear.BlockCommitment( + _deploymentBlock, // commitment block hash + _deploymentTimestamp, // commitment block timestamp + router.latestCommittedBlockHash(), // previously committed block hash + _deploymentBlock, // predecessor block hash + _transitions // commitment transitions + ) + ); + } + + function doPingPong(uint256[] memory _privateKeys, address _ping) internal { + vm.startPrank(admin, admin); + { + uint256 _allowanceBefore = wrappedVara.allowance(admin, _ping); + wrappedVara.approve(_ping, type(uint256).max); + IMirror(_ping).sendMessage("PING", 0); + wrappedVara.approve(_ping, _allowanceBefore); + } + vm.stopPrank(); + + uint48 _pingTimestamp = uint48(vm.getBlockTimestamp()); + bytes32 _pingBlock = blockHash(vm.getBlockNumber()); + + rollBlocks(1); + + Gear.Message[] memory _outgoingMessages = new Gear.Message[](1); + _outgoingMessages[0] = Gear.Message( + 0, // message id + admin, // destination + "PONG", // payload + 0, // value + Gear.ReplyDetails( + 0, // reply to + 0 // reply code + ) + ); + + Gear.StateTransition[] memory _transitions = new Gear.StateTransition[](1); + _transitions[0] = Gear.StateTransition( + _ping, // actor id + bytes32(uint256(2)), // new state hash + address(0), // inheritor + 0, // value to receive + new Gear.ValueClaim[](0), // value claims + _outgoingMessages // messages + ); + + vm.expectEmit(true, false, false, false); + emit IMirror.Message(0, admin, "PONG", 0); + commitBlock( + _privateKeys, + Gear.BlockCommitment( + _pingBlock, // commitment block hash + _pingTimestamp, // commitment block timestamp + router.latestCommittedBlockHash(), // previously committed block hash + _pingBlock, // predecessor block hash + _transitions // commitment transitions + ) + ); + } +} diff --git a/ethexe/contracts/test/Router.t.sol b/ethexe/contracts/test/Router.t.sol index 9e685766a37..504837d7094 100644 --- a/ethexe/contracts/test/Router.t.sol +++ b/ethexe/contracts/test/Router.t.sol @@ -1,16 +1,12 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; -import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import {Test, console} from "forge-std/Test.sol"; +import {console} from "forge-std/Test.sol"; import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; -import {IMirror, Mirror} from "../src/Mirror.sol"; -import {MirrorProxy} from "../src/MirrorProxy.sol"; -import {IRouter, Router} from "../src/Router.sol"; -import {WrappedVara} from "../src/WrappedVara.sol"; import {Gear} from "../src/libraries/Gear.sol"; +import {Base} from "./Base.t.sol"; -contract RouterTest is Test { +contract RouterTest is Base { using MessageHashUtils for address; address immutable deployer = 0x116B4369a90d2E9DA6BD7a924A23B164E10f6FE9; @@ -27,9 +23,15 @@ contract RouterTest is Test { address[] public validators; uint256[] public validatorsPrivateKeys; - Router public router; + function setUp() public override { + admin = 0x116B4369a90d2E9DA6BD7a924A23B164E10f6FE9; + eraDuration = 1000; + electionDuration = 100; + blockDuration = 12; + maxValidators = 3; + + setUpWrappedVara(); - function setUp() public { validators.push(alicePublic); validators.push(bobPublic); validators.push(charliePublic); @@ -38,197 +40,85 @@ contract RouterTest is Test { validatorsPrivateKeys.push(bobPrivate); validatorsPrivateKeys.push(charliePrivate); - startPrank(deployer); + setUpRouter(validators); + } - WrappedVara wrappedVara = WrappedVara( - Upgrades.deployTransparentProxy( - "WrappedVara.sol", deployer, abi.encodeCall(WrappedVara.initialize, (deployer)) - ) - ); + function test_validatorsCommitment() public { + address[] memory _validators = new address[](3); + uint256[] memory _validatorPrivateKeys = new uint256[](3); + for (uint256 i = 0; i < 3; i++) { + (address addr, uint256 key) = makeAddrAndKey(vm.toString(i)); + _validators[i] = addr; + _validatorPrivateKeys[i] = key; + } - address mirrorAddress = vm.computeCreateAddress(deployer, vm.getNonce(deployer) + 2); - address mirrorProxyAddress = vm.computeCreateAddress(deployer, vm.getNonce(deployer) + 3); + Gear.ValidatorsCommitment memory commitment = Gear.ValidatorsCommitment(_validators, 1); - router = Router( - Upgrades.deployTransparentProxy( - "Router.sol", - deployer, - abi.encodeCall( - Router.initialize, (deployer, mirrorAddress, mirrorProxyAddress, address(wrappedVara), validators) - ) - ) - ); + // Election is not yet started + vm.expectRevert(); + commitValidators(commitment); - vm.roll(vm.getBlockNumber() + 1); + // Still not started + vm.warp(router.genesisTimestamp() + eraDuration - electionDuration - 1); + vm.expectRevert(); + commitValidators(commitment); - router.lookupGenesisHash(); + vm.warp(router.genesisTimestamp() + eraDuration - electionDuration); - wrappedVara.approve(address(router), type(uint256).max); + // Started but wrong era index + Gear.ValidatorsCommitment memory commitment2 = Gear.ValidatorsCommitment(_validators, 2); + vm.expectRevert(); + commitValidators(commitment2); - Mirror mirror = new Mirror(); + // Correct commitment + commitValidators(commitment); - MirrorProxy mirrorProxy = new MirrorProxy(address(router)); - assertEq(mirrorProxy.router(), address(router)); + // Try to set validators twice + vm.expectRevert(); + commitValidators(commitment); - assertEq(router.mirrorImpl(), address(mirror)); - assertEq(router.mirrorProxyImpl(), address(mirrorProxy)); + // Validators are not updated yet assertEq(router.validators(), validators); - assertEq(router.signingThresholdPercentage(), 6666); - - assert(router.areValidators(validators)); - } - - function test_ping() public { - startPrank(deployer); - - bytes32 codeId = bytes32(uint256(1)); - bytes32 blobTxHash = bytes32(uint256(2)); - - router.requestCodeValidation(codeId, blobTxHash); - Gear.CodeCommitment[] memory codeCommitments = new Gear.CodeCommitment[](1); - codeCommitments[0] = Gear.CodeCommitment(codeId, true); + vm.warp(router.genesisTimestamp() + eraDuration); - assertEq(router.validators().length, 3); - assertEq(router.validatorsThreshold(), 2); + // Validators are updated + assertEq(router.validators(), _validators); - router.commitCodes(codeCommitments, _signCodeCommitments(codeCommitments)); + // Update them locally + validators = _validators; + validatorsPrivateKeys = _validatorPrivateKeys; - address actorId = router.createProgram(codeId, "salt", "PING", 1_000_000_000); - IMirror actor = IMirror(actorId); + // Commit the same validators again + vm.warp(vm.getBlockTimestamp() + eraDuration - electionDuration); + commitValidators(commitment2); - assertEq(actor.router(), address(router)); - assertEq(actor.stateHash(), 0); - assertEq(actor.inheritor(), address(0)); + vm.warp(vm.getBlockTimestamp() + electionDuration); + assertEq(router.validators(), _validators); - vm.roll(vm.getBlockNumber() + 1); + // Do not commit validators - should continue to work with validators from previous era then. + vm.warp(vm.getBlockTimestamp() + 10 * eraDuration); + assertEq(router.validators(), _validators); - Gear.Message[] memory messages = new Gear.Message[](1); - messages[0] = Gear.Message( - 0, // message id - deployer, // destination - "PONG", // payload - 0, // value - Gear.ReplyDetails( - 0, // reply to - 0 // reply code - ) - ); + // Try to commit from past validators + uint256 currentEraIndex = (vm.getBlockTimestamp() - router.genesisTimestamp()) / eraDuration; + vm.warp(router.genesisTimestamp() + (currentEraIndex + 1) * eraDuration - electionDuration); + assertEq(router.validators(), _validators); + commitment.eraIndex = currentEraIndex + 1; - Gear.StateTransition[] memory transitions = new Gear.StateTransition[](1); - transitions[0] = Gear.StateTransition( - actorId, // actor id - bytes32(uint256(42)), // new state hash - address(0), // inheritor - uint128(0), // value to receive - new Gear.ValueClaim[](0), // value claims - messages // messages - ); + uint256[] memory wrongValidatorPrivateKeys = new uint256[](3); + wrongValidatorPrivateKeys[0] = 1; + wrongValidatorPrivateKeys[1] = 2; + wrongValidatorPrivateKeys[2] = 3; + assertNotEq(wrongValidatorPrivateKeys, validatorsPrivateKeys); - Gear.BlockCommitment[] memory blockCommitments = new Gear.BlockCommitment[](1); - blockCommitments[0] = Gear.BlockCommitment( - bytes32(uint256(1)), // block hash - uint48(0), // block timestamp - bytes32(uint256(0)), // previous committed block - blockhash(block.number - 1), // predecessor block - transitions // transitions - ); - - router.commitBlocks(blockCommitments, _signBlockCommitments(blockCommitments)); - - assertEq(router.latestCommittedBlockHash(), bytes32(uint256(1))); - - assertEq(actor.stateHash(), bytes32(uint256(42))); - assertEq(actor.nonce(), uint256(1)); + vm.expectRevert(); + commitValidators(wrongValidatorPrivateKeys, commitment); } /* helper functions */ - function startPrank(address msgSender) private { - vm.startPrank(msgSender, msgSender); - } - - function _signBlockCommitments(Gear.BlockCommitment[] memory blockCommitments) - private - view - returns (bytes[] memory) - { - bytes memory blockCommitmentsBytes; - - for (uint256 i = 0; i < blockCommitments.length; i++) { - Gear.BlockCommitment memory blockCommitment = blockCommitments[i]; - - bytes memory transitionsHashesBytes; - - for (uint256 j = 0; j < blockCommitment.transitions.length; j++) { - Gear.StateTransition memory transition = blockCommitment.transitions[j]; - - bytes memory valueClaimsBytes; - for (uint256 k = 0; k < transition.valueClaims.length; k++) { - Gear.ValueClaim memory claim = transition.valueClaims[k]; - valueClaimsBytes = bytes.concat(valueClaimsBytes, Gear.valueClaimBytes(claim)); - } - - bytes memory messagesHashesBytes; - for (uint256 k = 0; k < transition.messages.length; k++) { - Gear.Message memory message = transition.messages[k]; - messagesHashesBytes = bytes.concat(messagesHashesBytes, Gear.messageHash(message)); - } - - transitionsHashesBytes = bytes.concat( - transitionsHashesBytes, - Gear.stateTransitionHash( - transition.actorId, - transition.newStateHash, - transition.inheritor, - transition.valueToReceive, - keccak256(valueClaimsBytes), - keccak256(messagesHashesBytes) - ) - ); - } - - blockCommitmentsBytes = bytes.concat( - blockCommitmentsBytes, - Gear.blockCommitmentHash( - blockCommitment.hash, - blockCommitment.timestamp, - blockCommitment.previousCommittedBlock, - blockCommitment.predecessorBlock, - keccak256(transitionsHashesBytes) - ) - ); - } - - return _signBytes(blockCommitmentsBytes); - } - - function _signCodeCommitments(Gear.CodeCommitment[] memory codeCommitments) private view returns (bytes[] memory) { - bytes memory codeCommitmentsBytes; - - for (uint256 i = 0; i < codeCommitments.length; i++) { - Gear.CodeCommitment memory codeCommitment = codeCommitments[i]; - - codeCommitmentsBytes = - bytes.concat(codeCommitmentsBytes, keccak256(abi.encodePacked(codeCommitment.id, codeCommitment.valid))); - } - - return _signBytes(codeCommitmentsBytes); - } - - function _signBytes(bytes memory message) private view returns (bytes[] memory) { - bytes[] memory signatures = new bytes[](validatorsPrivateKeys.length); - - bytes32 msgHash = address(router).toDataWithIntendedValidatorHash(abi.encodePacked(keccak256(message))); - - for (uint256 i = 0; i < validatorsPrivateKeys.length; i++) { - uint256 validatorPrivateKey = validatorsPrivateKeys[i]; - - (uint8 v, bytes32 r, bytes32 s) = vm.sign(validatorPrivateKey, msgHash); - - signatures[i] = abi.encodePacked(r, s, v); - } - - return signatures; + function commitValidators(Gear.ValidatorsCommitment memory commitment) private { + commitValidators(validatorsPrivateKeys, commitment); } } diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 590e692dbee..a81f8ed7a0d 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -28,8 +28,8 @@ use ethexe_common::{ gear::StateTransition, }; use ethexe_runtime_common::state::{ - Allocations, DispatchStash, HashOf, Mailbox, MemoryPages, MessageQueue, ProgramState, Storage, - Waitlist, + Allocations, DispatchStash, HashOf, Mailbox, MemoryPages, MemoryPagesRegion, MessageQueue, + ProgramState, Storage, Waitlist, }; use gear_core::{ code::InstrumentedCode, @@ -540,10 +540,21 @@ impl Storage for Database { }) } + fn read_pages_region(&self, hash: HashOf) -> Option { + self.cas.read(&hash.hash()).map(|data| { + MemoryPagesRegion::decode(&mut &data[..]) + .expect("Failed to decode data into `MemoryPagesRegion`") + }) + } + fn write_pages(&self, pages: MemoryPages) -> HashOf { unsafe { HashOf::new(self.cas.write(&pages.encode())) } } + fn write_pages_region(&self, pages_region: MemoryPagesRegion) -> HashOf { + unsafe { HashOf::new(self.cas.write(&pages_region.encode())) } + } + fn read_allocations(&self, hash: HashOf) -> Option { self.cas.read(&hash.hash()).map(|data| { Allocations::decode(&mut &data[..]).expect("Failed to decode data into `Allocations`") diff --git a/ethexe/ethereum/Mirror.json b/ethexe/ethereum/Mirror.json index ab35e7e6c0e..c9896ce70d6 100644 --- a/ethexe/ethereum/Mirror.json +++ b/ethexe/ethereum/Mirror.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createDecoder","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decoder","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"inheritor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initMessage","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"executableBalance","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageSent","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"replySent","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyTo","type":"bytes32","internalType":"bytes32"},{"name":"replyCode","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"sendValueToInheritor","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setInheritor","inputs":[{"name":"_inheritor","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"updateState","inputs":[{"name":"newStateHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"valueClaimed","inputs":[{"name":"claimedId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x608080604052346015576111d7908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c806312b222561461092557806314503e51146108aa57806329336f391461080757806336a52a18146107df5780635b1b84f71461062e57806360302d2414610615578063701da98e146105f8578063704ed5421461058b5780638ea59e1d1461052657806391d5a64c146104be5780639cb3300514610495578063affed0e014610477578063c2df600914610414578063c78bde7714610394578063d562422214610298578063de1dd2e0146101045763f887ea40146100d5575f80fd5b3461010157806003193601126101015760206100ef610ed9565b6040516001600160a01b039091168152f35b80fd5b50346101015760803660031901126101015761011e610979565b60243567ffffffffffffffff81116102945761013e9036906004016109d1565b906101476109a5565b926101506109bb565b9361016c6001600160a01b03610164610ed9565b1633146109ff565b6002549081610238577f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6947f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366676020846101c761023296610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916838201908152601481019290925261020581603484015b03601f198101835282610af4565b519020986001600160801b0360405191168152a16040516001600160a01b03909416969394859485610ac6565b0390a280f35b60405162461bcd60e51b815260206004820152602e60248201527f696e6974206d657373616765206d75737420626520637265617465642062656660448201526d6f726520616e79206f746865727360901b6064820152608490fd5b8280fd5b5060403660031901126101015760043567ffffffffffffffff8111610390576102c59036906004016109d1565b91602435906001600160801b038216820361010157506001546020937f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c691610316906001600160a01b031615610a62565b61031f8361105f565b60025461032b81610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261035f81603484016101f7565b519020936103856001600160a01b03610376611185565b16946040519384938885610ac6565b0390a2604051908152f35b5080fd5b50346101015760a0366003190112610101576103ae610979565b60243567ffffffffffffffff8111610294576103ce9036906004016109d1565b90916103d86109a5565b608435926001600160e01b0319841684036104105761040d946104046001600160a01b03610164610ed9565b60643593610da4565b80f35b8580fd5b50346101015760803660031901126101015761042e61098f565b6044359067ffffffffffffffff82116102945761045261040d9236906004016109d1565b9061045b6109bb565b9261046f6001600160a01b03610164610ed9565b600435610ccc565b50346101015780600319360112610101576020600254604051908152f35b50346101015780600319360112610101576003546040516001600160a01b039091168152602090f35b5034610101576020366003190112610101576001546104e6906001600160a01b031615610a62565b6001600160a01b036104f6611185565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a280f35b50346101015760203660031901126101015760043561054e6001600160a01b03610164610ed9565b8082540361055a575080f35b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930928455604051908152a180f35b506020366003190112610101576004356001600160801b03811690818103610294577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667916105ee6020926105e960018060a01b036001541615610a62565b61105f565b604051908152a180f35b503461010157806003193601126101015760209054604051908152f35b503461010157806003193601126101015761040d610b49565b503461071d57604036600319011261071d57610648610979565b61065b6001600160a01b03610164610ed9565b600254610780576003546001600160a01b03166107305780763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff6e5af43d82803e903d91602b57fd5bf39360881c16175f5260781b1760205260018060a01b03602435603760095ff516801561072157600380546001600160a01b03191682179055803b1561071d575f809160046040518094819363204a7f0760e21b83525af1801561071257610704575080f35b61071091505f90610af4565b005b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152602260248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206265604482015270666f726520696e6974206d65737361676560781b6064820152608490fd5b3461071d575f36600319011261071d576001546040516001600160a01b039091168152602090f35b606036600319011261071d5760243567ffffffffffffffff811161071d576108547fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f9136906004016109d1565b61085f9291926109a5565b600154909390610878906001600160a01b031615610a62565b6108818461105f565b6108a56001600160a01b03610894611185565b169460405193849360043585610ac6565b0390a2005b3461071d57606036600319011261071d577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578360406108e661098f565b61090c6108f16109a5565b9182906109076001600160a01b03610164610ed9565b610f34565b6001600160801b038251916004358352166020820152a1005b3461071d57602036600319011261071d5761093e610979565b6109516001600160a01b03610164610ed9565b60018060a01b03166bffffffffffffffffffffffff60a01b6001541617600155610710610b49565b600435906001600160a01b038216820361071d57565b602435906001600160a01b038216820361071d57565b604435906001600160801b038216820361071d57565b606435906001600160801b038216820361071d57565b9181601f8401121561071d5782359167ffffffffffffffff831161071d576020838186019501011161071d57565b15610a0657565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b15610a6957565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610aed916001600160801b03939796978652606060208701526060860191610aa6565b9416910152565b90601f8019910116810190811067ffffffffffffffff821117610b1657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261071d57516001600160a01b038116810361071d5790565b6001546001600160a01b03168015610c485760049060206001600160a01b03610b70610ed9565b166040519384809263088f50cf60e41b82525afa918215610712576024926020915f91610c1b575b506040516370a0823160e01b815230600482015293849182906001600160a01b03165afa918215610712575f92610be0575b506001600160801b03610bde921690610f34565b565b91506020823d602011610c13575b81610bfb60209383610af4565b8101031261071d579051906001600160801b03610bca565b3d9150610bee565b610c3b9150823d8411610c41575b610c338183610af4565b810190610b2a565b5f610b98565b503d610c29565b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b3d15610cc7573d9067ffffffffffffffff8211610b165760405191610cbc601f8201601f191660200184610af4565b82523d5f602084013e565b606090565b600354909493906001600160a01b031680610d23575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f801177393610d1e9160405194859460018060a01b03169785610ac6565b0390a2565b5f80916040518260208201916374fad4ef60e01b83528a602482015260018060a01b038816604482015260806064820152610d8381610d6660a482018a8d610aa6565b6001600160801b038d16608483015203601f198101835282610af4565b51926207a120f1610d92610c8d565b50610d9d575f610ce2565b5050505050565b94909294610db28682610f34565b6003546001600160a01b03169081610e24575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c6936001600160801b03610e08604051958695606087526060870191610aa6565b9616602084015260408301526001600160e01b031916930390a2565b604051639649744960e01b602082019081526001600160a01b03909216602482015260a060448201525f92839290918390610e9c818c6001600160801b03610e7060c484018d8f610aa6565b91166064830152608482018d90526001600160e01b03198a1660a483015203601f198101835282610af4565b51926207a120f1610eab610c8d565b50610d9d575f80610dc5565b5f198114610ec55760010190565b634e487b7160e01b5f52601160045260245ffd5b6040516303e21fa960e61b8152602081600481305afa908115610712575f91610f00575090565b610f19915060203d602011610c4157610c338183610af4565b90565b9081602091031261071d5751801515810361071d5790565b60049160206001600160a01b03610f49610ed9565b166040519485809263088f50cf60e41b82525afa928315610712575f93611035575b506001600160801b031680610f7f57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1908115610712575f91611006575b5015610fca57565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b611028915060203d60201161102e575b6110208183610af4565b810190610f1c565b5f610fc2565b503d611016565b6001600160801b039193506110589060203d602011610c4157610c338183610af4565b9290610f6b565b6001600160801b0316806110705750565b6001600160a01b03611080610ed9565b60405163088f50cf60e41b81529116602082600481845afa918215610712576020926064915f91611168575b505f6110b6611185565b6040516323b872dd60e01b81526001600160a01b039182166004820152602481019590955260448501969096529294859384929091165af1908115610712575f91611149575b501561110457565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611162915060203d60201161102e576110208183610af4565b5f6110fc565b61117f9150843d8611610c4157610c338183610af4565b5f6110ac565b600354336001600160a01b039091160361119d573290565b339056fea2646970667358221220b494dbdf9a3752137d3750f75138c50d55c481fa64665364f23894379254372e64736f6c634300081a0033","sourceMap":"403:6111:157:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f803560e01c806312b222561461092557806314503e51146108aa57806329336f391461080757806336a52a18146107df5780635b1b84f71461062e57806360302d2414610615578063701da98e146105f8578063704ed5421461058b5780638ea59e1d1461052657806391d5a64c146104be5780639cb3300514610495578063affed0e014610477578063c2df600914610414578063c78bde7714610394578063d562422214610298578063de1dd2e0146101045763f887ea40146100d5575f80fd5b3461010157806003193601126101015760206100ef610ed9565b6040516001600160a01b039091168152f35b80fd5b50346101015760803660031901126101015761011e610979565b60243567ffffffffffffffff81116102945761013e9036906004016109d1565b906101476109a5565b926101506109bb565b9361016c6001600160a01b03610164610ed9565b1633146109ff565b6002549081610238577f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6947f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c0542366676020846101c761023296610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916838201908152601481019290925261020581603484015b03601f198101835282610af4565b519020986001600160801b0360405191168152a16040516001600160a01b03909416969394859485610ac6565b0390a280f35b60405162461bcd60e51b815260206004820152602e60248201527f696e6974206d657373616765206d75737420626520637265617465642062656660448201526d6f726520616e79206f746865727360901b6064820152608490fd5b8280fd5b5060403660031901126101015760043567ffffffffffffffff8111610390576102c59036906004016109d1565b91602435906001600160801b038216820361010157506001546020937f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c691610316906001600160a01b031615610a62565b61031f8361105f565b60025461032b81610eb7565b6002556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261035f81603484016101f7565b519020936103856001600160a01b03610376611185565b16946040519384938885610ac6565b0390a2604051908152f35b5080fd5b50346101015760a0366003190112610101576103ae610979565b60243567ffffffffffffffff8111610294576103ce9036906004016109d1565b90916103d86109a5565b608435926001600160e01b0319841684036104105761040d946104046001600160a01b03610164610ed9565b60643593610da4565b80f35b8580fd5b50346101015760803660031901126101015761042e61098f565b6044359067ffffffffffffffff82116102945761045261040d9236906004016109d1565b9061045b6109bb565b9261046f6001600160a01b03610164610ed9565b600435610ccc565b50346101015780600319360112610101576020600254604051908152f35b50346101015780600319360112610101576003546040516001600160a01b039091168152602090f35b5034610101576020366003190112610101576001546104e6906001600160a01b031615610a62565b6001600160a01b036104f6611185565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a280f35b50346101015760203660031901126101015760043561054e6001600160a01b03610164610ed9565b8082540361055a575080f35b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930928455604051908152a180f35b506020366003190112610101576004356001600160801b03811690818103610294577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667916105ee6020926105e960018060a01b036001541615610a62565b61105f565b604051908152a180f35b503461010157806003193601126101015760209054604051908152f35b503461010157806003193601126101015761040d610b49565b503461071d57604036600319011261071d57610648610979565b61065b6001600160a01b03610164610ed9565b600254610780576003546001600160a01b03166107305780763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff6e5af43d82803e903d91602b57fd5bf39360881c16175f5260781b1760205260018060a01b03602435603760095ff516801561072157600380546001600160a01b03191682179055803b1561071d575f809160046040518094819363204a7f0760e21b83525af1801561071257610704575080f35b61071091505f90610af4565b005b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152602260248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f6465636f64657220636f756c64206f6e6c792062652063726561746564206265604482015270666f726520696e6974206d65737361676560781b6064820152608490fd5b3461071d575f36600319011261071d576001546040516001600160a01b039091168152602090f35b606036600319011261071d5760243567ffffffffffffffff811161071d576108547fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f9136906004016109d1565b61085f9291926109a5565b600154909390610878906001600160a01b031615610a62565b6108818461105f565b6108a56001600160a01b03610894611185565b169460405193849360043585610ac6565b0390a2005b3461071d57606036600319011261071d577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578360406108e661098f565b61090c6108f16109a5565b9182906109076001600160a01b03610164610ed9565b610f34565b6001600160801b038251916004358352166020820152a1005b3461071d57602036600319011261071d5761093e610979565b6109516001600160a01b03610164610ed9565b60018060a01b03166bffffffffffffffffffffffff60a01b6001541617600155610710610b49565b600435906001600160a01b038216820361071d57565b602435906001600160a01b038216820361071d57565b604435906001600160801b038216820361071d57565b606435906001600160801b038216820361071d57565b9181601f8401121561071d5782359167ffffffffffffffff831161071d576020838186019501011161071d57565b15610a0657565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b15610a6957565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610aed916001600160801b03939796978652606060208701526060860191610aa6565b9416910152565b90601f8019910116810190811067ffffffffffffffff821117610b1657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261071d57516001600160a01b038116810361071d5790565b6001546001600160a01b03168015610c485760049060206001600160a01b03610b70610ed9565b166040519384809263088f50cf60e41b82525afa918215610712576024926020915f91610c1b575b506040516370a0823160e01b815230600482015293849182906001600160a01b03165afa918215610712575f92610be0575b506001600160801b03610bde921690610f34565b565b91506020823d602011610c13575b81610bfb60209383610af4565b8101031261071d579051906001600160801b03610bca565b3d9150610bee565b610c3b9150823d8411610c41575b610c338183610af4565b810190610b2a565b5f610b98565b503d610c29565b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b3d15610cc7573d9067ffffffffffffffff8211610b165760405191610cbc601f8201601f191660200184610af4565b82523d5f602084013e565b606090565b600354909493906001600160a01b031680610d23575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f801177393610d1e9160405194859460018060a01b03169785610ac6565b0390a2565b5f80916040518260208201916374fad4ef60e01b83528a602482015260018060a01b038816604482015260806064820152610d8381610d6660a482018a8d610aa6565b6001600160801b038d16608483015203601f198101835282610af4565b51926207a120f1610d92610c8d565b50610d9d575f610ce2565b5050505050565b94909294610db28682610f34565b6003546001600160a01b03169081610e24575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c6936001600160801b03610e08604051958695606087526060870191610aa6565b9616602084015260408301526001600160e01b031916930390a2565b604051639649744960e01b602082019081526001600160a01b03909216602482015260a060448201525f92839290918390610e9c818c6001600160801b03610e7060c484018d8f610aa6565b91166064830152608482018d90526001600160e01b03198a1660a483015203601f198101835282610af4565b51926207a120f1610eab610c8d565b50610d9d575f80610dc5565b5f198114610ec55760010190565b634e487b7160e01b5f52601160045260245ffd5b6040516303e21fa960e61b8152602081600481305afa908115610712575f91610f00575090565b610f19915060203d602011610c4157610c338183610af4565b90565b9081602091031261071d5751801515810361071d5790565b60049160206001600160a01b03610f49610ed9565b166040519485809263088f50cf60e41b82525afa928315610712575f93611035575b506001600160801b031680610f7f57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af1908115610712575f91611006575b5015610fca57565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b611028915060203d60201161102e575b6110208183610af4565b810190610f1c565b5f610fc2565b503d611016565b6001600160801b039193506110589060203d602011610c4157610c338183610af4565b9290610f6b565b6001600160801b0316806110705750565b6001600160a01b03611080610ed9565b60405163088f50cf60e41b81529116602082600481845afa918215610712576020926064915f91611168575b505f6110b6611185565b6040516323b872dd60e01b81526001600160a01b039182166004820152602481019590955260448501969096529294859384929091165af1908115610712575f91611149575b501561110457565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611162915060203d60201161102e576110208183610af4565b5f6110fc565b61117f9150843d8611610c4157610c338183610af4565b5f6110ac565b600354336001600160a01b039091160361119d573290565b339056fea2646970667358221220b494dbdf9a3752137d3750f75138c50d55c481fa64665364f23894379254372e64736f6c634300081a0033","sourceMap":"403:6111:157:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;:::-;403:6111;5486:10;:22;5478:81;:::i;:::-;5035:5;403:6111;5035:10;;403:6111;;5381:52;5217:7;5316:50;403:6111;5217:7;;5381:52;5217:7;;:::i;:::-;5035:5;403:6111;;;5282:4;403:6111;;-1:-1:-1;;403:6111:157;5257:42;;;403:6111;;;;;;;;;;5257:42;403:6111;;;;5257:42;;1132:40;;5257:42;;;;;;:::i;:::-;403:6111;5247:53;;403:6111;-1:-1:-1;;;;;403:6111:157;;;;;;5316:50;403:6111;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;5381:52;:::i;:::-;;;;403:6111;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;-1:-1:-1;403:6111:157;;-1:-1:-1;;403:6111:157;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;-1:-1:-1;403:6111:157;;;;1189:57;;1000;;-1:-1:-1;;;;;403:6111:157;1008:23;1000:57;:::i;:::-;1091:6;;;:::i;:::-;1164:7;403:6111;1164:7;;;:::i;:::-;;403:6111;;;1157:4;403:6111;;-1:-1:-1;;403:6111:157;1132:40;;;403:6111;;;;;;;;;;1132:40;403:6111;;;;1132:40;403:6111;1132:40;403:6111;1122:51;;;1189:57;-1:-1:-1;;;;;1218:9:157;;:::i;:::-;403:6111;;;;1189:57;;;;;;:::i;:::-;;;;403:6111;;;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;403:6111:157;;;;;;5569:1;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;5569:1;;:::i;:::-;403:6111;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;;;;;;;;;;5569:1;403:6111;;;;;;:::i;:::-;;;;:::i;:::-;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;5569:1;:::i;403:6111::-;;;;;;;;;;;;;;568:20;403:6111;;;;;;;;;;;;;;;;;;;;604:22;403:6111;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;1635:57;;-1:-1:-1;;;;;403:6111:157;1643:23;1635:57;:::i;:::-;-1:-1:-1;;;;;1743:9:157;;:::i;:::-;403:6111;1708:45;403:6111;;;;;;;1708:45;403:6111;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;;2409:25;2405:123;;403:6111;;;2405:123;403:6111;;2494:23;403:6111;;;;;;;;2494:23;403:6111;;;-1:-1:-1;403:6111:157;;-1:-1:-1;;403:6111:157;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;1955:39;403:6111;1932:6;403:6111;;1841:57;403:6111;;;;;1849:9;403:6111;;1849:23;1841:57;:::i;:::-;1932:6;:::i;:::-;403:6111;;;;;1955:39;403:6111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;4604:5;403:6111;;;4686:7;403:6111;-1:-1:-1;;;;;403:6111:157;;;3743:569:44;;;;;;;;;403:6111:157;3743:569:44;;;;403:6111:157;3743:569:44;403:6111:157;;;;;;;3743:569:44;;403:6111:157;3743:569:44;403:6111:157;4325:22:44;;4321:85;;4686:7:157;403:6111;;-1:-1:-1;;;;;;403:6111:157;;;;;4825:36;;;;;403:6111;;;;;;;;;;;;;4825:36;;;;;;;;;;403:6111;;;4825:36;;;;403:6111;4825:36;;:::i;:::-;403:6111;4825:36;403:6111;;;;;;;;;4825:36;403:6111;;;4321:85:44;4370:25;;;403:6111:157;4370:25:44;403:6111:157;;4370:25:44;403:6111:157;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;-1:-1:-1;;403:6111:157;;;;;;;;;;;;1500:63;403:6111;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;1386:57;;-1:-1:-1;;;;;403:6111:157;1394:23;1386:57;:::i;:::-;1477:6;;;:::i;:::-;1500:63;-1:-1:-1;;;;;1535:9:157;;:::i;:::-;403:6111;;;;;;;;;1500:63;;:::i;:::-;;;;403:6111;;;;;;;-1:-1:-1;;403:6111:157;;;;4462:30;403:6111;;;:::i;:::-;4440:5;403:6111;;:::i;:::-;;;;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;4440:5;:::i;:::-;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;4462:30;403:6111;;;;;;;-1:-1:-1;;403:6111:157;;;;;;:::i;:::-;5478:81;-1:-1:-1;;;;;5500:8:157;;:::i;5478:81::-;403:6111;;;;;;;;;2698:22;403:6111;;;2698:22;403:6111;2698:22;;:::i;403:6111::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;403:6111:157;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;;;;-1:-1:-1;403:6111:157;;;;;;;;-1:-1:-1;;403:6111:157;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;1132:40;;403:6111;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;403:6111:157;;;;;-1:-1:-1;403:6111:157;;;;;;;;;;;-1:-1:-1;;;;;403:6111:157;;;;;;;:::o;2007:267::-;403:6111;;-1:-1:-1;;;;;403:6111:157;2064:23;;403:6111;;2159:31;;;-1:-1:-1;;;;;2167:8:157;;:::i;:::-;403:6111;;;;;;;;;;2159:31;;;;;;;;;2146:70;2159:31;;;-1:-1:-1;2159:31:157;;;2007:267;-1:-1:-1;403:6111:157;;-1:-1:-1;;;2146:70:157;;2210:4;2159:31;2146:70;;403:6111;;;;;;-1:-1:-1;;;;;403:6111:157;2146:70;;;;;;;-1:-1:-1;2146:70:157;;;2007:267;403:6111;-1:-1:-1;;;;;2250:16:157;403:6111;;2250:16;;:::i;:::-;2007:267::o;2146:70::-;;;2159:31;2146:70;;2159:31;2146:70;;;;;;2159:31;2146:70;;;:::i;:::-;;;403:6111;;;;;;;-1:-1:-1;;;;;2146:70:157;;;;;-1:-1:-1;2146:70:157;;2159:31;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;403:6111;;;-1:-1:-1;;;403:6111:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1132:40;403:6111;;-1:-1:-1;;403:6111:157;;;;;:::i;:::-;;;;-1:-1:-1;403:6111:157;;;;:::o;:::-;;;:::o;2766:754::-;2983:7;403:6111;2766:754;;;;-1:-1:-1;;;;;403:6111:157;;2979:479;;2766:754;403:6111;3473:40;403:6111;3473:40;403:6111;;;;;;;;;;;;3473:40;;;:::i;:::-;;;;2766:754::o;2979:479::-;-1:-1:-1;403:6111:157;;;;3060:94;;;;3083:37;;;;3060:94;;;;;;403:6111;;;;;;;;;;;;;;;;;3060:94;403:6111;;;;;;;;:::i;:::-;-1:-1:-1;;;;;403:6111:157;;;;;;3060:94;1132:40;;3060:94;;;;;;:::i;:::-;3280:36;;3298:7;3280:36;;;:::i;:::-;;3331:117;;2979:479;;;3331:117;3427:7;;;;;:::o;3526:775::-;;;;;3716:5;;;;:::i;:::-;3737:7;403:6111;-1:-1:-1;;;;;403:6111:157;;;3733:505;;3526:775;403:6111;;4253:41;403:6111;-1:-1:-1;;;;;403:6111:157;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;;403:6111:157;;4253:41;;;3526:775::o;3733:505::-;403:6111;;-1:-1:-1;;;3798:138:157;;;;;;-1:-1:-1;;;;;403:6111:157;;;3798:138;;;403:6111;;;;;;-1:-1:-1;;;;403:6111:157;;-1:-1:-1;;3798:138:157;403:6111;;-1:-1:-1;;;;;403:6111:157;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;403:6111:157;;;;;;3798:138;-1:-1:-1;;3798:138:157;;;;;;:::i;:::-;4062:36;;4080:7;4062:36;;;:::i;:::-;;4113:115;;3733:505;;;;403:6111;-1:-1:-1;;403:6111:157;;;;;;;:::o;:::-;;;;;;;;;;;;666:108;403:6111;;-1:-1:-1;;;731:36:157;;;403:6111;731:36;403:6111;752:4;731:36;;;;;;;-1:-1:-1;731:36:157;;;724:43;666:108;:::o;731:36::-;;;;;;;;;;;;;;:::i;:::-;666:108;:::o;403:6111::-;;;;;;;;;;;;;;;;;;:::o;6196:316::-;6312:31;;;-1:-1:-1;;;;;6320:8:157;;:::i;:::-;403:6111;;;;;;;;;;6312:31;;;;;;;;;-1:-1:-1;6312:31:157;;;6196:316;403:6111;-1:-1:-1;;;;;403:6111:157;6359:10;6355:151;;6196:316;;;:::o;6355:151::-;403:6111;;-1:-1:-1;;;6400:40:157;;-1:-1:-1;;;;;403:6111:157;;;6312:31;6400:40;;403:6111;;;;;;;;;6312:31;;403:6111;;6400:40;;403:6111;;-1:-1:-1;;403:6111:157;6400:40;;;;;;;-1:-1:-1;6400:40:157;;;6355:151;403:6111;;;;6196:316::o;403:6111::-;;;-1:-1:-1;;;403:6111:157;;6312:31;;403:6111;;;;;;;;-1:-1:-1;;;6400:40:157;403:6111;;;;;;6400:40;;;;6312:31;6400:40;6312:31;6400:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6312:31;-1:-1:-1;;;;;6312:31:157;;;;;;;;;;;;;;;:::i;:::-;;;;;5805:385;-1:-1:-1;;;;;403:6111:157;5875:11;5871:313;;5805:385;:::o;5871:313::-;-1:-1:-1;;;;;5926:8:157;;:::i;:::-;403:6111;;-1:-1:-1;;;5989:36:157;;403:6111;;5989:36;403:6111;5989:36;403:6111;;5989:36;;;;;;;;;6056:58;5989:36;5885:1;5989:36;;;5871:313;6081:9;5885:1;6081:9;;:::i;:::-;403:6111;;-1:-1:-1;;;6056:58:157;;-1:-1:-1;;;;;403:6111:157;;;5989:36;6056:58;;403:6111;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;403:6111:157;6056:58;;;;;;;5885:1;6056:58;;;5871:313;403:6111;;;;5805:385::o;403:6111::-;;;-1:-1:-1;;;403:6111:157;;5989:36;;403:6111;;;;;;;;;;;;;6056:58;;403:6111;6056:58;;;;5989:36;6056:58;5989:36;6056:58;;;;;;;:::i;:::-;;;;5989:36;;;;;;;;;;;;;;:::i;:::-;;;;5617:182;5695:7;403:6111;5681:10;-1:-1:-1;;;;;403:6111:157;;;5681:21;403:6111;;5725:9;5718:16;:::o;5677:116::-;5681:10;5765:17;:::o","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","createDecoder(address,bytes32)":"5b1b84f7","decoder()":"9cb33005","executableBalanceTopUp(uint128)":"704ed542","inheritor()":"36a52a18","initMessage(address,bytes,uint128,uint128)":"de1dd2e0","messageSent(bytes32,address,bytes,uint128)":"c2df6009","nonce()":"affed0e0","replySent(address,bytes,uint128,bytes32,bytes4)":"c78bde77","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","sendValueToInheritor()":"60302d24","setInheritor(address)":"12b22256","stateHash()":"701da98e","updateState(bytes32)":"8ea59e1d","valueClaimed(bytes32,address,uint128)":"14503e51"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"createDecoder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inheritor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"executableBalance\",\"type\":\"uint128\"}],\"name\":\"initMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"messageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"replySent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendValueToInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inheritor\",\"type\":\"address\"}],\"name\":\"setInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"valueClaimed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}]},\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601\",\"dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L\"]},\"src/IMirrorDecoder.sol\":{\"keccak256\":\"0x95bfe42461bd03e726f894679f4b4133034a405672fe8343c3343d0964cf9072\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a0907d84596ed62b9ea222fd841fc0259e87b17dd0b5af3f6d0d8a8f4726994d\",\"dweb:/ipfs/QmTkumKh7DBJNXrark6NBqBxCtnYmbRMGYkRyxxzpW9wKr\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xdbae96165e93f374f6b0ab185c3ce61e5eed76cce317349eda4aab002f3998c7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://275140952f5612b545caf34e66af939a42a6156ddf9ae312192e9dd3010c8be2\",\"dweb:/ipfs/QmZYtSdHt5GkL5GT4gqNsuoryZ1whB1AQfmSmoNCHhicQc\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0x0267b86e843457670a1bfde7690c19f449383eab961b6127dda5f8e4fe5a1d83\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://13361caf3d945b1fb9117e8fc360059b28a5764f1811d8f53f96fb1f8a9d352f\",\"dweb:/ipfs/QmWhAnGpkpVohUWxkJSJm5PmNZVS8WpGQCfwkqTG2TXd1g\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xa543913342b4408d07fe4d884280b5c1d2430e8386713e9b6e1a5924e3e2bfbc\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9e466d986795dab2d942984fcbf03e8e8995cd17e4221f1dfca715af091d03ec\",\"dweb:/ipfs/QmWo16RoqKERSYornA8qPqL32rYveeEHxiHmDHongS6uzy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"createDecoder"},{"inputs":[],"stateMutability":"view","type":"function","name":"decoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"executableBalanceTopUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"inheritor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"uint128","name":"executableBalance","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"initMessage"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"messageSent"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"bytes32","name":"replyTo","type":"bytes32"},{"internalType":"bytes4","name":"replyCode","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"replySent"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"sendValueToInheritor"},{"inputs":[{"internalType":"address","name":"_inheritor","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setInheritor"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"newStateHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateState"},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"valueClaimed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373","urls":["bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601","dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L"],"license":"UNLICENSED"},"src/IMirrorDecoder.sol":{"keccak256":"0x95bfe42461bd03e726f894679f4b4133034a405672fe8343c3343d0964cf9072","urls":["bzz-raw://a0907d84596ed62b9ea222fd841fc0259e87b17dd0b5af3f6d0d8a8f4726994d","dweb:/ipfs/QmTkumKh7DBJNXrark6NBqBxCtnYmbRMGYkRyxxzpW9wKr"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xdbae96165e93f374f6b0ab185c3ce61e5eed76cce317349eda4aab002f3998c7","urls":["bzz-raw://275140952f5612b545caf34e66af939a42a6156ddf9ae312192e9dd3010c8be2","dweb:/ipfs/QmZYtSdHt5GkL5GT4gqNsuoryZ1whB1AQfmSmoNCHhicQc"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0x0267b86e843457670a1bfde7690c19f449383eab961b6127dda5f8e4fe5a1d83","urls":["bzz-raw://13361caf3d945b1fb9117e8fc360059b28a5764f1811d8f53f96fb1f8a9d352f","dweb:/ipfs/QmWhAnGpkpVohUWxkJSJm5PmNZVS8WpGQCfwkqTG2TXd1g"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xa543913342b4408d07fe4d884280b5c1d2430e8386713e9b6e1a5924e3e2bfbc","urls":["bzz-raw://9e466d986795dab2d942984fcbf03e8e8995cd17e4221f1dfca715af091d03ec","dweb:/ipfs/QmWo16RoqKERSYornA8qPqL32rYveeEHxiHmDHongS6uzy"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":74655,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":74657,"contract":"src/Mirror.sol:Mirror","label":"inheritor","offset":0,"slot":"1","type":"t_address"},{"astId":74659,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"2","type":"t_uint256"},{"astId":74661,"contract":"src/Mirror.sol:Mirror","label":"decoder","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":75222,"exportedSymbols":{"Clones":[41840],"IMirror":[73603],"IMirrorDecoder":[73638],"IMirrorProxy":[73646],"IRouter":[73896],"IWrappedVara":[73907],"Mirror":[75221]},"nodeType":"SourceUnit","src":"39:6476:157","nodes":[{"id":74639,"nodeType":"PragmaDirective","src":"39:24:157","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":74641,"nodeType":"ImportDirective","src":"65:48:157","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73647,"symbolAliases":[{"foreign":{"id":74640,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73646,"src":"73:12:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74643,"nodeType":"ImportDirective","src":"114:38:157","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73604,"symbolAliases":[{"foreign":{"id":74642,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"122:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74645,"nodeType":"ImportDirective","src":"153:38:157","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73897,"symbolAliases":[{"foreign":{"id":74644,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"161:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74647,"nodeType":"ImportDirective","src":"192:48:157","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73908,"symbolAliases":[{"foreign":{"id":74646,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"200:12:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74649,"nodeType":"ImportDirective","src":"241:52:157","nodes":[],"absolutePath":"src/IMirrorDecoder.sol","file":"./IMirrorDecoder.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":73639,"symbolAliases":[{"foreign":{"id":74648,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"249:14:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":74651,"nodeType":"ImportDirective","src":"294:64:157","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":75222,"sourceUnit":41841,"symbolAliases":[{"foreign":{"id":74650,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"302:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75221,"nodeType":"ContractDefinition","src":"403:6111:157","nodes":[{"id":74655,"nodeType":"VariableDeclaration","src":"436:24:157","nodes":[],"baseFunctions":[73490],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"451:9:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74654,"name":"bytes32","nodeType":"ElementaryTypeName","src":"436:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":74657,"nodeType":"VariableDeclaration","src":"466:24:157","nodes":[],"baseFunctions":[73495],"constant":false,"functionSelector":"36a52a18","mutability":"mutable","name":"inheritor","nameLocation":"481:9:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74656,"name":"address","nodeType":"ElementaryTypeName","src":"466:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":74659,"nodeType":"VariableDeclaration","src":"568:20:157","nodes":[],"baseFunctions":[73500],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"583:5:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74658,"name":"uint256","nodeType":"ElementaryTypeName","src":"568:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":74661,"nodeType":"VariableDeclaration","src":"604:22:157","nodes":[],"baseFunctions":[73510],"constant":false,"functionSelector":"9cb33005","mutability":"mutable","name":"decoder","nameLocation":"619:7:157","scope":75221,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74660,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":74676,"nodeType":"FunctionDefinition","src":"666:108:157","nodes":[],"body":{"id":74675,"nodeType":"Block","src":"714:60:157","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":74669,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"752:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":74668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"744:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74667,"name":"address","nodeType":"ElementaryTypeName","src":"744:7:157","typeDescriptions":{}}},"id":74670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"744:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74666,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73646,"src":"731:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$73646_$","typeString":"type(contract IMirrorProxy)"}},"id":74671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"731:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$73646","typeString":"contract IMirrorProxy"}},"id":74672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"759:6:157","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":73645,"src":"731:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"731:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":74665,"id":74674,"nodeType":"Return","src":"724:43:157"}]},"baseFunctions":[73505],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"675:6:157","parameters":{"id":74662,"nodeType":"ParameterList","parameters":[],"src":"681:2:157"},"returnParameters":{"id":74665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74664,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74676,"src":"705:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74663,"name":"address","nodeType":"ElementaryTypeName","src":"705:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"704:9:157"},"scope":75221,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":74724,"nodeType":"FunctionDefinition","src":"893:380:157","nodes":[],"body":{"id":74723,"nodeType":"Block","src":"990:283:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74686,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1008:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1029:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1021:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74687,"name":"address","nodeType":"ElementaryTypeName","src":"1021:7:157","typeDescriptions":{}}},"id":74690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1021:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1008:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1033:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74685,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1000:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1000:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74694,"nodeType":"ExpressionStatement","src":"1000:57:157"},{"expression":{"arguments":[{"id":74696,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74680,"src":"1091:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74695,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"1068:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1068:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74698,"nodeType":"ExpressionStatement","src":"1068:30:157"},{"assignments":[74700],"declarations":[{"constant":false,"id":74700,"mutability":"mutable","name":"id","nameLocation":"1117:2:157","nodeType":"VariableDeclaration","scope":74723,"src":"1109:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1109:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":74712,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":74706,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1157:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":74705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1149:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74704,"name":"address","nodeType":"ElementaryTypeName","src":"1149:7:157","typeDescriptions":{}}},"id":74707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1149:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1164:7:157","subExpression":{"id":74708,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"1164:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":74702,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1132:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74703,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1136:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"1132:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":74710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1132:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":74701,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1122:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":74711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1122:51:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1109:64:157"},{"eventCall":{"arguments":[{"id":74714,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74700,"src":"1214:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74715,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"1218:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1218:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74717,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74678,"src":"1229:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74718,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74680,"src":"1239:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74713,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73433,"src":"1189:24:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1189:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74720,"nodeType":"EmitStatement","src":"1184:62:157"},{"expression":{"id":74721,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74700,"src":"1264:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":74684,"id":74722,"nodeType":"Return","src":"1257:9:157"}]},"baseFunctions":[73519],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"902:11:157","parameters":{"id":74681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74678,"mutability":"mutable","name":"_payload","nameLocation":"929:8:157","nodeType":"VariableDeclaration","scope":74724,"src":"914:23:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74677,"name":"bytes","nodeType":"ElementaryTypeName","src":"914:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74680,"mutability":"mutable","name":"_value","nameLocation":"947:6:157","nodeType":"VariableDeclaration","scope":74724,"src":"939:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74679,"name":"uint128","nodeType":"ElementaryTypeName","src":"939:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"913:41:157"},"returnParameters":{"id":74684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":74724,"src":"981:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74682,"name":"bytes32","nodeType":"ElementaryTypeName","src":"981:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"980:9:157"},"scope":75221,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74756,"nodeType":"FunctionDefinition","src":"1279:291:157","nodes":[],"body":{"id":74755,"nodeType":"Block","src":"1376:194:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74734,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1394:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1415:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1407:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74735,"name":"address","nodeType":"ElementaryTypeName","src":"1407:7:157","typeDescriptions":{}}},"id":74738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1407:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1394:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1419:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74733,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1386:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74742,"nodeType":"ExpressionStatement","src":"1386:57:157"},{"expression":{"arguments":[{"id":74744,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74730,"src":"1477:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74743,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"1454:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1454:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74746,"nodeType":"ExpressionStatement","src":"1454:30:157"},{"eventCall":{"arguments":[{"id":74748,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74726,"src":"1523:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74749,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"1535:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1535:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74751,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74728,"src":"1546:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74752,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74730,"src":"1556:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74747,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73444,"src":"1500:22:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1500:63:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74754,"nodeType":"EmitStatement","src":"1495:68:157"}]},"baseFunctions":[73528],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[],"name":"sendReply","nameLocation":"1288:9:157","parameters":{"id":74731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74726,"mutability":"mutable","name":"_repliedTo","nameLocation":"1306:10:157","nodeType":"VariableDeclaration","scope":74756,"src":"1298:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74725,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1298:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74728,"mutability":"mutable","name":"_payload","nameLocation":"1333:8:157","nodeType":"VariableDeclaration","scope":74756,"src":"1318:23:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74727,"name":"bytes","nodeType":"ElementaryTypeName","src":"1318:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74730,"mutability":"mutable","name":"_value","nameLocation":"1351:6:157","nodeType":"VariableDeclaration","scope":74756,"src":"1343:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74729,"name":"uint128","nodeType":"ElementaryTypeName","src":"1343:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1297:61:157"},"returnParameters":{"id":74732,"nodeType":"ParameterList","parameters":[],"src":"1376:0:157"},"scope":75221,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74778,"nodeType":"FunctionDefinition","src":"1576:184:157","nodes":[],"body":{"id":74777,"nodeType":"Block","src":"1625:135:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74762,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1643:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1664:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1656:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74763,"name":"address","nodeType":"ElementaryTypeName","src":"1656:7:157","typeDescriptions":{}}},"id":74766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1656:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1643:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1668:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74761,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1635:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1635:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74770,"nodeType":"ExpressionStatement","src":"1635:57:157"},{"eventCall":{"arguments":[{"id":74772,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74758,"src":"1731:10:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":74773,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"1743:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1743:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":74771,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73451,"src":"1708:22:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":74775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1708:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74776,"nodeType":"EmitStatement","src":"1703:50:157"}]},"baseFunctions":[73533],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[],"name":"claimValue","nameLocation":"1585:10:157","parameters":{"id":74759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74758,"mutability":"mutable","name":"_claimedId","nameLocation":"1604:10:157","nodeType":"VariableDeclaration","scope":74778,"src":"1596:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1596:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1595:20:157"},"returnParameters":{"id":74760,"nodeType":"ParameterList","parameters":[],"src":"1625:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74802,"nodeType":"FunctionDefinition","src":"1766:235:157","nodes":[],"body":{"id":74801,"nodeType":"Block","src":"1831:170:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74784,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"1849:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":74787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1870:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1862:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74785,"name":"address","nodeType":"ElementaryTypeName","src":"1862:7:157","typeDescriptions":{}}},"id":74788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1862:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1849:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":74790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1874:23:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":74783,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1841:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1841:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74792,"nodeType":"ExpressionStatement","src":"1841:57:157"},{"expression":{"arguments":[{"id":74794,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74780,"src":"1932:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74793,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75182,"src":"1909:22:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1909:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74796,"nodeType":"ExpressionStatement","src":"1909:30:157"},{"eventCall":{"arguments":[{"id":74798,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74780,"src":"1987:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74797,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73456,"src":"1955:31:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":74799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1955:39:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74800,"nodeType":"EmitStatement","src":"1950:44:157"}]},"baseFunctions":[73538],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[],"name":"executableBalanceTopUp","nameLocation":"1775:22:157","parameters":{"id":74781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74780,"mutability":"mutable","name":"_value","nameLocation":"1806:6:157","nodeType":"VariableDeclaration","scope":74802,"src":"1798:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74779,"name":"uint128","nodeType":"ElementaryTypeName","src":"1798:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1797:16:157"},"returnParameters":{"id":74782,"nodeType":"ParameterList","parameters":[],"src":"1831:0:157"},"scope":75221,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":74841,"nodeType":"FunctionDefinition","src":"2007:267:157","nodes":[],"body":{"id":74840,"nodeType":"Block","src":"2046:228:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74806,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"2064:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2085:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2077:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74807,"name":"address","nodeType":"ElementaryTypeName","src":"2077:7:157","typeDescriptions":{}}},"id":74810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2077:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2064:23:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973206e6f74207465726d696e61746564","id":74812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2089:27:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""},"value":"program is not terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""}],"id":74805,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2056:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":74813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2056:61:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74814,"nodeType":"ExpressionStatement","src":"2056:61:157"},{"assignments":[74816],"declarations":[{"constant":false,"id":74816,"mutability":"mutable","name":"balance","nameLocation":"2136:7:157","nodeType":"VariableDeclaration","scope":74840,"src":"2128:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74815,"name":"uint256","nodeType":"ElementaryTypeName","src":"2128:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":74831,"initialValue":{"arguments":[{"arguments":[{"id":74828,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2210:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":74827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2202:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74826,"name":"address","nodeType":"ElementaryTypeName","src":"2202:7:157","typeDescriptions":{}}},"id":74829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2202:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":74819,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"2167:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2167:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74818,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"2159:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":74821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":74822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2177:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73741,"src":"2159:29:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":74823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":74817,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"2146:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":74824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2146:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":74825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2192:9:157","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43097,"src":"2146:55:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":74830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2146:70:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2128:88:157"},{"expression":{"arguments":[{"id":74833,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"2239:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":74836,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74816,"src":"2258:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":74835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2250:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":74834,"name":"uint128","nodeType":"ElementaryTypeName","src":"2250:7:157","typeDescriptions":{}}},"id":74837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2250:16:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74832,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75220,"src":"2226:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":74838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:41:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74839,"nodeType":"ExpressionStatement","src":"2226:41:157"}]},"baseFunctions":[73541],"functionSelector":"60302d24","implemented":true,"kind":"function","modifiers":[],"name":"sendValueToInheritor","nameLocation":"2016:20:157","parameters":{"id":74803,"nodeType":"ParameterList","parameters":[],"src":"2036:2:157"},"returnParameters":{"id":74804,"nodeType":"ParameterList","parameters":[],"src":"2046:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":74862,"nodeType":"FunctionDefinition","src":"2332:202:157","nodes":[],"body":{"id":74861,"nodeType":"Block","src":"2395:139:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":74850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74848,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74655,"src":"2409:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":74849,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74843,"src":"2422:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2409:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74860,"nodeType":"IfStatement","src":"2405:123:157","trueBody":{"id":74859,"nodeType":"Block","src":"2436:92:157","statements":[{"expression":{"id":74853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74851,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74655,"src":"2450:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74852,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74843,"src":"2462:12:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2450:24:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":74854,"nodeType":"ExpressionStatement","src":"2450:24:157"},{"eventCall":{"arguments":[{"id":74856,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74655,"src":"2507:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":74855,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73422,"src":"2494:12:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":74857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2494:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74858,"nodeType":"EmitStatement","src":"2489:28:157"}]}}]},"baseFunctions":[73546],"functionSelector":"8ea59e1d","implemented":true,"kind":"function","modifiers":[{"id":74846,"kind":"modifierInvocation","modifierName":{"id":74845,"name":"onlyRouter","nameLocations":["2384:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"2384:10:157"},"nodeType":"ModifierInvocation","src":"2384:10:157"}],"name":"updateState","nameLocation":"2341:11:157","parameters":{"id":74844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74843,"mutability":"mutable","name":"newStateHash","nameLocation":"2361:12:157","nodeType":"VariableDeclaration","scope":74862,"src":"2353:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74842,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2353:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2352:22:157"},"returnParameters":{"id":74847,"nodeType":"ParameterList","parameters":[],"src":"2395:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74877,"nodeType":"FunctionDefinition","src":"2626:134:157","nodes":[],"body":{"id":74876,"nodeType":"Block","src":"2688:72:157","nodes":[],"statements":[{"expression":{"id":74871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":74869,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74657,"src":"2698:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":74870,"name":"_inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74864,"src":"2710:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2698:22:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74872,"nodeType":"ExpressionStatement","src":"2698:22:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":74873,"name":"sendValueToInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74841,"src":"2731:20:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":74874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2731:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74875,"nodeType":"ExpressionStatement","src":"2731:22:157"}]},"baseFunctions":[73551],"functionSelector":"12b22256","implemented":true,"kind":"function","modifiers":[{"id":74867,"kind":"modifierInvocation","modifierName":{"id":74866,"name":"onlyRouter","nameLocations":["2677:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"2677:10:157"},"nodeType":"ModifierInvocation","src":"2677:10:157"}],"name":"setInheritor","nameLocation":"2635:12:157","parameters":{"id":74865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74864,"mutability":"mutable","name":"_inheritor","nameLocation":"2656:10:157","nodeType":"VariableDeclaration","scope":74877,"src":"2648:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74863,"name":"address","nodeType":"ElementaryTypeName","src":"2648:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2647:20:157"},"returnParameters":{"id":74868,"nodeType":"ParameterList","parameters":[],"src":"2688:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74932,"nodeType":"FunctionDefinition","src":"2766:754:157","nodes":[],"body":{"id":74931,"nodeType":"Block","src":"2879:641:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74890,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"2983:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3002:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2994:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74891,"name":"address","nodeType":"ElementaryTypeName","src":"2994:7:157","typeDescriptions":{}}},"id":74894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2994:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2983:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74923,"nodeType":"IfStatement","src":"2979:479:157","trueBody":{"id":74922,"nodeType":"Block","src":"3006:452:157","statements":[{"assignments":[74897],"declarations":[{"constant":false,"id":74897,"mutability":"mutable","name":"callData","nameLocation":"3033:8:157","nodeType":"VariableDeclaration","scope":74922,"src":"3020:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":74896,"name":"bytes","nodeType":"ElementaryTypeName","src":"3020:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":74908,"initialValue":{"arguments":[{"expression":{"expression":{"id":74900,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"3083:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73638_$","typeString":"type(contract IMirrorDecoder)"}},"id":74901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3098:13:157","memberName":"onMessageSent","nodeType":"MemberAccess","referencedDeclaration":73624,"src":"3083:28:157","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes32_$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$returns$__$","typeString":"function IMirrorDecoder.onMessageSent(bytes32,address,bytes calldata,uint128)"}},"id":74902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3112:8:157","memberName":"selector","nodeType":"MemberAccess","src":"3083:37:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":74903,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74879,"src":"3122:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74904,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74881,"src":"3126:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74905,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74883,"src":"3139:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74906,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74885,"src":"3148:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":74898,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3060:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3064:18:157","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3060:22:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":74907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3060:94:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3020:134:157"},{"assignments":[74910,null],"declarations":[{"constant":false,"id":74910,"mutability":"mutable","name":"success","nameLocation":"3268:7:157","nodeType":"VariableDeclaration","scope":74922,"src":"3263:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74909,"name":"bool","nodeType":"ElementaryTypeName","src":"3263:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":74917,"initialValue":{"arguments":[{"id":74915,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74897,"src":"3307:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":74911,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"3280:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3288:4:157","memberName":"call","nodeType":"MemberAccess","src":"3280:12:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":74913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3298:7:157","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"3280:26:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3262:54:157"},{"condition":{"id":74918,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74910,"src":"3335:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74921,"nodeType":"IfStatement","src":"3331:117:157","trueBody":{"id":74920,"nodeType":"Block","src":"3344:104:157","statements":[{"functionReturnParameters":74889,"id":74919,"nodeType":"Return","src":"3427:7:157"}]}}]}},{"eventCall":{"arguments":[{"id":74925,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74879,"src":"3481:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74926,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74881,"src":"3485:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74927,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74883,"src":"3498:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74928,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74885,"src":"3507:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74924,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73467,"src":"3473:7:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":74929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3473:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74930,"nodeType":"EmitStatement","src":"3468:45:157"}]},"baseFunctions":[73562],"functionSelector":"c2df6009","implemented":true,"kind":"function","modifiers":[{"id":74888,"kind":"modifierInvocation","modifierName":{"id":74887,"name":"onlyRouter","nameLocations":["2868:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"2868:10:157"},"nodeType":"ModifierInvocation","src":"2868:10:157"}],"name":"messageSent","nameLocation":"2775:11:157","parameters":{"id":74886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74879,"mutability":"mutable","name":"id","nameLocation":"2795:2:157","nodeType":"VariableDeclaration","scope":74932,"src":"2787:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74878,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2787:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74881,"mutability":"mutable","name":"destination","nameLocation":"2807:11:157","nodeType":"VariableDeclaration","scope":74932,"src":"2799:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74880,"name":"address","nodeType":"ElementaryTypeName","src":"2799:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74883,"mutability":"mutable","name":"payload","nameLocation":"2835:7:157","nodeType":"VariableDeclaration","scope":74932,"src":"2820:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74882,"name":"bytes","nodeType":"ElementaryTypeName","src":"2820:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74885,"mutability":"mutable","name":"value","nameLocation":"2852:5:157","nodeType":"VariableDeclaration","scope":74932,"src":"2844:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74884,"name":"uint128","nodeType":"ElementaryTypeName","src":"2844:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2786:72:157"},"returnParameters":{"id":74889,"nodeType":"ParameterList","parameters":[],"src":"2879:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":74995,"nodeType":"FunctionDefinition","src":"3526:775:157","nodes":[],"body":{"id":74994,"nodeType":"Block","src":"3680:621:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":74948,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74934,"src":"3703:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74949,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74938,"src":"3716:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":74947,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75220,"src":"3690:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":74950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3690:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74951,"nodeType":"ExpressionStatement","src":"3690:32:157"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":74957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":74952,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"3737:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":74955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3756:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":74954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3748:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":74953,"name":"address","nodeType":"ElementaryTypeName","src":"3748:7:157","typeDescriptions":{}}},"id":74956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3737:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74986,"nodeType":"IfStatement","src":"3733:505:157","trueBody":{"id":74985,"nodeType":"Block","src":"3760:478:157","statements":[{"assignments":[74959],"declarations":[{"constant":false,"id":74959,"mutability":"mutable","name":"callData","nameLocation":"3787:8:157","nodeType":"VariableDeclaration","scope":74985,"src":"3774:21:157","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":74958,"name":"bytes","nodeType":"ElementaryTypeName","src":"3774:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":74971,"initialValue":{"arguments":[{"expression":{"expression":{"id":74962,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"3838:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73638_$","typeString":"type(contract IMirrorDecoder)"}},"id":74963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3853:11:157","memberName":"onReplySent","nodeType":"MemberAccess","referencedDeclaration":73637,"src":"3838:26:157","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function IMirrorDecoder.onReplySent(address,bytes calldata,uint128,bytes32,bytes4)"}},"id":74964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3865:8:157","memberName":"selector","nodeType":"MemberAccess","src":"3838:35:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":74965,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74934,"src":"3875:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":74966,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74936,"src":"3888:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74967,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74938,"src":"3897:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":74968,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74940,"src":"3904:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74969,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74942,"src":"3913:9:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":74960,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3798:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":74961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3802:18:157","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3798:22:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":74970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3798:138:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3774:162:157"},{"assignments":[74973,null],"declarations":[{"constant":false,"id":74973,"mutability":"mutable","name":"success","nameLocation":"4050:7:157","nodeType":"VariableDeclaration","scope":74985,"src":"4045:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":74972,"name":"bool","nodeType":"ElementaryTypeName","src":"4045:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":74980,"initialValue":{"arguments":[{"id":74978,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74959,"src":"4089:8:157","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":74974,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4062:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":74975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4070:4:157","memberName":"call","nodeType":"MemberAccess","src":"4062:12:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":74976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4080:7:157","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"4062:26:157","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":74979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4044:54:157"},{"condition":{"id":74981,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74973,"src":"4117:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":74984,"nodeType":"IfStatement","src":"4113:115:157","trueBody":{"id":74983,"nodeType":"Block","src":"4126:102:157","statements":[{"functionReturnParameters":74946,"id":74982,"nodeType":"Return","src":"4207:7:157"}]}}]}},{"eventCall":{"arguments":[{"id":74988,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74936,"src":"4259:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":74989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74938,"src":"4268:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":74990,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74940,"src":"4275:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":74991,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74942,"src":"4284:9:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":74987,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73478,"src":"4253:5:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":74992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4253:41:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74993,"nodeType":"EmitStatement","src":"4248:46:157"}]},"baseFunctions":[73575],"functionSelector":"c78bde77","implemented":true,"kind":"function","modifiers":[{"id":74945,"kind":"modifierInvocation","modifierName":{"id":74944,"name":"onlyRouter","nameLocations":["3665:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"3665:10:157"},"nodeType":"ModifierInvocation","src":"3665:10:157"}],"name":"replySent","nameLocation":"3535:9:157","parameters":{"id":74943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74934,"mutability":"mutable","name":"destination","nameLocation":"3553:11:157","nodeType":"VariableDeclaration","scope":74995,"src":"3545:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74933,"name":"address","nodeType":"ElementaryTypeName","src":"3545:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":74936,"mutability":"mutable","name":"payload","nameLocation":"3581:7:157","nodeType":"VariableDeclaration","scope":74995,"src":"3566:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":74935,"name":"bytes","nodeType":"ElementaryTypeName","src":"3566:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":74938,"mutability":"mutable","name":"value","nameLocation":"3598:5:157","nodeType":"VariableDeclaration","scope":74995,"src":"3590:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":74937,"name":"uint128","nodeType":"ElementaryTypeName","src":"3590:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":74940,"mutability":"mutable","name":"replyTo","nameLocation":"3613:7:157","nodeType":"VariableDeclaration","scope":74995,"src":"3605:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74939,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3605:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74942,"mutability":"mutable","name":"replyCode","nameLocation":"3629:9:157","nodeType":"VariableDeclaration","scope":74995,"src":"3622:16:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":74941,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3622:6:157","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"3544:95:157"},"returnParameters":{"id":74946,"nodeType":"ParameterList","parameters":[],"src":"3680:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75017,"nodeType":"FunctionDefinition","src":"4307:192:157","nodes":[],"body":{"id":75016,"nodeType":"Block","src":"4404:95:157","nodes":[],"statements":[{"expression":{"arguments":[{"id":75007,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74999,"src":"4427:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75008,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75001,"src":"4440:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75006,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75220,"src":"4414:12:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":75009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4414:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75010,"nodeType":"ExpressionStatement","src":"4414:32:157"},{"eventCall":{"arguments":[{"id":75012,"name":"claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74997,"src":"4475:9:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75013,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75001,"src":"4486:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75011,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73485,"src":"4462:12:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":75014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4462:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75015,"nodeType":"EmitStatement","src":"4457:35:157"}]},"baseFunctions":[73584],"functionSelector":"14503e51","implemented":true,"kind":"function","modifiers":[{"id":75004,"kind":"modifierInvocation","modifierName":{"id":75003,"name":"onlyRouter","nameLocations":["4393:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"4393:10:157"},"nodeType":"ModifierInvocation","src":"4393:10:157"}],"name":"valueClaimed","nameLocation":"4316:12:157","parameters":{"id":75002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74997,"mutability":"mutable","name":"claimedId","nameLocation":"4337:9:157","nodeType":"VariableDeclaration","scope":75017,"src":"4329:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":74996,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4329:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":74999,"mutability":"mutable","name":"destination","nameLocation":"4356:11:157","nodeType":"VariableDeclaration","scope":75017,"src":"4348:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74998,"name":"address","nodeType":"ElementaryTypeName","src":"4348:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75001,"mutability":"mutable","name":"value","nameLocation":"4377:5:157","nodeType":"VariableDeclaration","scope":75017,"src":"4369:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75000,"name":"uint128","nodeType":"ElementaryTypeName","src":"4369:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"4328:55:157"},"returnParameters":{"id":75005,"nodeType":"ParameterList","parameters":[],"src":"4404:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75058,"nodeType":"FunctionDefinition","src":"4505:363:157","nodes":[],"body":{"id":75057,"nodeType":"Block","src":"4586:282:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75027,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"4604:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4613:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4604:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465636f64657220636f756c64206f6e6c792062652063726561746564206265666f726520696e6974206d657373616765","id":75030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4616:51:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_6179111dcaf1477c3041b02777f68e6f9b47b46bbab14442425a87a2628d248f","typeString":"literal_string \"decoder could only be created before init message\""},"value":"decoder could only be created before init message"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6179111dcaf1477c3041b02777f68e6f9b47b46bbab14442425a87a2628d248f","typeString":"literal_string \"decoder could only be created before init message\""}],"id":75026,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4596:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4596:72:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75032,"nodeType":"ExpressionStatement","src":"4596:72:157"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75034,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4686:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4705:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4697:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75035,"name":"address","nodeType":"ElementaryTypeName","src":"4697:7:157","typeDescriptions":{}}},"id":75038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4697:10:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4686:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465636f64657220636f756c64206f6e6c792062652063726561746564206f6e6365","id":75040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4709:36:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_2e378c5f64e230407f2ea4b317edbd32f061bf14b6bede40dc75fef40a2c3f34","typeString":"literal_string \"decoder could only be created once\""},"value":"decoder could only be created once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2e378c5f64e230407f2ea4b317edbd32f061bf14b6bede40dc75fef40a2c3f34","typeString":"literal_string \"decoder could only be created once\""}],"id":75033,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4678:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:68:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75042,"nodeType":"ExpressionStatement","src":"4678:68:157"},{"expression":{"id":75049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75043,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4757:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":75046,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75019,"src":"4793:14:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75047,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75021,"src":"4809:4:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75044,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"4767:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41840_$","typeString":"type(library Clones)"}},"id":75045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4774:18:157","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41758,"src":"4767:25:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":75048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4767:47:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4757:57:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75050,"nodeType":"ExpressionStatement","src":"4757:57:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75052,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"4840:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75051,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73638,"src":"4825:14:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$73638_$","typeString":"type(contract IMirrorDecoder)"}},"id":75053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4825:23:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorDecoder_$73638","typeString":"contract IMirrorDecoder"}},"id":75054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4849:10:157","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":73608,"src":"4825:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":75055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4825:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75056,"nodeType":"ExpressionStatement","src":"4825:36:157"}]},"baseFunctions":[73591],"functionSelector":"5b1b84f7","implemented":true,"kind":"function","modifiers":[{"id":75024,"kind":"modifierInvocation","modifierName":{"id":75023,"name":"onlyRouter","nameLocations":["4575:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"4575:10:157"},"nodeType":"ModifierInvocation","src":"4575:10:157"}],"name":"createDecoder","nameLocation":"4514:13:157","parameters":{"id":75022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75019,"mutability":"mutable","name":"implementation","nameLocation":"4536:14:157","nodeType":"VariableDeclaration","scope":75058,"src":"4528:22:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75018,"name":"address","nodeType":"ElementaryTypeName","src":"4528:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75021,"mutability":"mutable","name":"salt","nameLocation":"4560:4:157","nodeType":"VariableDeclaration","scope":75058,"src":"4552:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75020,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4552:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4527:38:157"},"returnParameters":{"id":75025,"nodeType":"ParameterList","parameters":[],"src":"4586:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75108,"nodeType":"FunctionDefinition","src":"4874:566:157","nodes":[],"body":{"id":75107,"nodeType":"Block","src":"5017:423:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75072,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"5035:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":75073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5044:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5035:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e6974206d657373616765206d7573742062652063726561746564206265666f726520616e79206f7468657273","id":75075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5047:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_f66d837affa62c092147eee2ea617e19f402b656aab0578ab0acad8d1e9a6341","typeString":"literal_string \"init message must be created before any others\""},"value":"init message must be created before any others"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f66d837affa62c092147eee2ea617e19f402b656aab0578ab0acad8d1e9a6341","typeString":"literal_string \"init message must be created before any others\""}],"id":75071,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5027:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5027:69:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75077,"nodeType":"ExpressionStatement","src":"5027:69:157"},{"assignments":[75079],"declarations":[{"constant":false,"id":75079,"mutability":"mutable","name":"initNonce","nameLocation":"5205:9:157","nodeType":"VariableDeclaration","scope":75107,"src":"5197:17:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75078,"name":"uint256","nodeType":"ElementaryTypeName","src":"5197:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75082,"initialValue":{"id":75081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5217:7:157","subExpression":{"id":75080,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74659,"src":"5217:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5197:27:157"},{"assignments":[75084],"declarations":[{"constant":false,"id":75084,"mutability":"mutable","name":"id","nameLocation":"5242:2:157","nodeType":"VariableDeclaration","scope":75107,"src":"5234:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75083,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5234:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75095,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":75090,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5282:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$75221","typeString":"contract Mirror"}],"id":75089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5274:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":75088,"name":"address","nodeType":"ElementaryTypeName","src":"5274:7:157","typeDescriptions":{}}},"id":75091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5274:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75092,"name":"initNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75079,"src":"5289:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":75086,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5257:3:157","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5261:12:157","memberName":"encodePacked","nodeType":"MemberAccess","src":"5257:16:157","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5257:42:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75085,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5247:9:157","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5247:53:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5234:66:157"},{"eventCall":{"arguments":[{"id":75097,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75066,"src":"5348:17:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75096,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73456,"src":"5316:31:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":75098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5316:50:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75099,"nodeType":"EmitStatement","src":"5311:55:157"},{"eventCall":{"arguments":[{"id":75101,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75084,"src":"5406:2:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75102,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75060,"src":"5410:6:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75103,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75062,"src":"5418:7:157","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75104,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75064,"src":"5427:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75100,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73433,"src":"5381:24:157","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":75105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5381:52:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75106,"nodeType":"EmitStatement","src":"5376:57:157"}]},"baseFunctions":[73602],"functionSelector":"de1dd2e0","implemented":true,"kind":"function","modifiers":[{"id":75069,"kind":"modifierInvocation","modifierName":{"id":75068,"name":"onlyRouter","nameLocations":["5002:10:157"],"nodeType":"IdentifierPath","referencedDeclaration":75121,"src":"5002:10:157"},"nodeType":"ModifierInvocation","src":"5002:10:157"}],"name":"initMessage","nameLocation":"4883:11:157","parameters":{"id":75067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75060,"mutability":"mutable","name":"source","nameLocation":"4903:6:157","nodeType":"VariableDeclaration","scope":75108,"src":"4895:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75059,"name":"address","nodeType":"ElementaryTypeName","src":"4895:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75062,"mutability":"mutable","name":"payload","nameLocation":"4926:7:157","nodeType":"VariableDeclaration","scope":75108,"src":"4911:22:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75061,"name":"bytes","nodeType":"ElementaryTypeName","src":"4911:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75064,"mutability":"mutable","name":"value","nameLocation":"4943:5:157","nodeType":"VariableDeclaration","scope":75108,"src":"4935:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75063,"name":"uint128","nodeType":"ElementaryTypeName","src":"4935:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":75066,"mutability":"mutable","name":"executableBalance","nameLocation":"4958:17:157","nodeType":"VariableDeclaration","scope":75108,"src":"4950:25:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75065,"name":"uint128","nodeType":"ElementaryTypeName","src":"4950:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"4894:82:157"},"returnParameters":{"id":75070,"nodeType":"ParameterList","parameters":[],"src":"5017:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75121,"nodeType":"ModifierDefinition","src":"5446:131:157","nodes":[],"body":{"id":75120,"nodeType":"Block","src":"5468:109:157","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75111,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5486:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5490:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5486:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":75113,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"5500:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5500:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5486:22:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6520666f72206f7065726174696f6e","id":75116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5510:48:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""},"value":"only router contract is eligible for operation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""}],"id":75110,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5478:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5478:81:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75118,"nodeType":"ExpressionStatement","src":"5478:81:157"},{"id":75119,"nodeType":"PlaceholderStatement","src":"5569:1:157"}]},"name":"onlyRouter","nameLocation":"5455:10:157","parameters":{"id":75109,"nodeType":"ParameterList","parameters":[],"src":"5465:2:157"},"virtual":false,"visibility":"internal"},{"id":75140,"nodeType":"FunctionDefinition","src":"5617:182:157","nodes":[],"body":{"id":75139,"nodeType":"Block","src":"5667:132:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":75126,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5681:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5685:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5681:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":75128,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74661,"src":"5695:7:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5681:21:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":75137,"nodeType":"Block","src":"5751:42:157","statements":[{"expression":{"expression":{"id":75134,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5772:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5776:6:157","memberName":"sender","nodeType":"MemberAccess","src":"5772:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75125,"id":75136,"nodeType":"Return","src":"5765:17:157"}]},"id":75138,"nodeType":"IfStatement","src":"5677:116:157","trueBody":{"id":75133,"nodeType":"Block","src":"5704:41:157","statements":[{"expression":{"expression":{"id":75130,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"5725:2:157","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":75131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5728:6:157","memberName":"origin","nodeType":"MemberAccess","src":"5725:9:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75125,"id":75132,"nodeType":"Return","src":"5718:16:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_source","nameLocation":"5626:7:157","parameters":{"id":75122,"nodeType":"ParameterList","parameters":[],"src":"5633:2:157"},"returnParameters":{"id":75125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75124,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75140,"src":"5658:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75123,"name":"address","nodeType":"ElementaryTypeName","src":"5658:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5657:9:157"},"scope":75221,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":75182,"nodeType":"FunctionDefinition","src":"5805:385:157","nodes":[],"body":{"id":75181,"nodeType":"Block","src":"5861:329:157","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75145,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75142,"src":"5875:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5885:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5875:11:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75180,"nodeType":"IfStatement","src":"5871:313:157","trueBody":{"id":75179,"nodeType":"Block","src":"5888:296:157","statements":[{"assignments":[75149],"declarations":[{"constant":false,"id":75149,"mutability":"mutable","name":"routerAddress","nameLocation":"5910:13:157","nodeType":"VariableDeclaration","scope":75179,"src":"5902:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75148,"name":"address","nodeType":"ElementaryTypeName","src":"5902:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":75152,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75150,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"5926:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5926:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5902:32:157"},{"assignments":[75155],"declarations":[{"constant":false,"id":75155,"mutability":"mutable","name":"wrappedVara","nameLocation":"5962:11:157","nodeType":"VariableDeclaration","scope":75179,"src":"5949:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"},"typeName":{"id":75154,"nodeType":"UserDefinedTypeName","pathNode":{"id":75153,"name":"IWrappedVara","nameLocations":["5949:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":73907,"src":"5949:12:157"},"referencedDeclaration":73907,"src":"5949:12:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":75163,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75158,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75149,"src":"5997:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75157,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"5989:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":75159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5989:22:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":75160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6012:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73741,"src":"5989:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5989:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75156,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"5976:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":75162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5976:50:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"5949:77:157"},{"assignments":[75165],"declarations":[{"constant":false,"id":75165,"mutability":"mutable","name":"success","nameLocation":"6046:7:157","nodeType":"VariableDeclaration","scope":75179,"src":"6041:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75164,"name":"bool","nodeType":"ElementaryTypeName","src":"6041:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75173,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":75168,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75140,"src":"6081:7:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6081:9:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75170,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75149,"src":"6092:13:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75171,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75142,"src":"6107:6:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75166,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75155,"src":"6056:11:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":75167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6068:12:157","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43139,"src":"6056:24:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":75172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6056:58:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"6041:73:157"},{"expression":{"arguments":[{"id":75175,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75165,"src":"6137:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":75176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6146:26:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":75174,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6129:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6129:44:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75178,"nodeType":"ExpressionStatement","src":"6129:44:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValueToRouter","nameLocation":"5814:22:157","parameters":{"id":75143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75142,"mutability":"mutable","name":"_value","nameLocation":"5845:6:157","nodeType":"VariableDeclaration","scope":75182,"src":"5837:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75141,"name":"uint128","nodeType":"ElementaryTypeName","src":"5837:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"5836:16:157"},"returnParameters":{"id":75144,"nodeType":"ParameterList","parameters":[],"src":"5861:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":75220,"nodeType":"FunctionDefinition","src":"6196:316:157","nodes":[],"body":{"id":75219,"nodeType":"Block","src":"6262:250:157","nodes":[],"statements":[{"assignments":[75191],"declarations":[{"constant":false,"id":75191,"mutability":"mutable","name":"wrappedVara","nameLocation":"6285:11:157","nodeType":"VariableDeclaration","scope":75219,"src":"6272:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"},"typeName":{"id":75190,"nodeType":"UserDefinedTypeName","pathNode":{"id":75189,"name":"IWrappedVara","nameLocations":["6272:12:157"],"nodeType":"IdentifierPath","referencedDeclaration":73907,"src":"6272:12:157"},"referencedDeclaration":73907,"src":"6272:12:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":75200,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":75194,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74676,"src":"6320:6:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":75195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6320:8:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75193,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"6312:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":75196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6312:17:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":75197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6330:11:157","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":73741,"src":"6312:29:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6312:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75192,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"6299:12:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":75199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6299:45:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"6272:72:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":75203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75201,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75186,"src":"6359:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6368:1:157","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6359:10:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75218,"nodeType":"IfStatement","src":"6355:151:157","trueBody":{"id":75217,"nodeType":"Block","src":"6371:135:157","statements":[{"assignments":[75205],"declarations":[{"constant":false,"id":75205,"mutability":"mutable","name":"success","nameLocation":"6390:7:157","nodeType":"VariableDeclaration","scope":75217,"src":"6385:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75204,"name":"bool","nodeType":"ElementaryTypeName","src":"6385:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":75211,"initialValue":{"arguments":[{"id":75208,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75184,"src":"6421:11:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75209,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75186,"src":"6434:5:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75206,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75191,"src":"6400:11:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":75207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6412:8:157","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43107,"src":"6400:20:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":75210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6400:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"6385:55:157"},{"expression":{"arguments":[{"id":75213,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75205,"src":"6463:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f2073656e64205756617261","id":75214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6472:22:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""},"value":"failed to send WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""}],"id":75212,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6455:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6455:40:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75216,"nodeType":"ExpressionStatement","src":"6455:40:157"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendValueTo","nameLocation":"6205:12:157","parameters":{"id":75187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75184,"mutability":"mutable","name":"destination","nameLocation":"6226:11:157","nodeType":"VariableDeclaration","scope":75220,"src":"6218:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75183,"name":"address","nodeType":"ElementaryTypeName","src":"6218:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75186,"mutability":"mutable","name":"value","nameLocation":"6247:5:157","nodeType":"VariableDeclaration","scope":75220,"src":"6239:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75185,"name":"uint128","nodeType":"ElementaryTypeName","src":"6239:7:157","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6217:36:157"},"returnParameters":{"id":75188,"nodeType":"ParameterList","parameters":[],"src":"6262:0:157"},"scope":75221,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":74652,"name":"IMirror","nameLocations":["422:7:157"],"nodeType":"IdentifierPath","referencedDeclaration":73603,"src":"422:7:157"},"id":74653,"nodeType":"InheritanceSpecifier","src":"422:7:157"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75221,73603],"name":"Mirror","nameLocation":"412:6:157","scope":75222,"usedErrors":[43912,43918],"usedEvents":[73422,73433,73444,73451,73456,73467,73478,73485]}],"license":"UNLICENSED"},"id":157} \ No newline at end of file +{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decoder","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"inheritor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_initializer","type":"address","internalType":"address"},{"name":"_decoder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initializer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"performStateTransition","inputs":[{"name":"_transition","type":"tuple","internalType":"struct Gear.StateTransition","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"transferLockedValueToInheritor","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x608080604052346015576116bb908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806329336f3914610d3957806336a52a1814610d11578063485cc95514610c7c578063701da98e14610c5f578063704ed54214610b4b57806391d5a64c14610aee5780639cb3300514610ac75780639ce110d714610a9f5780639ed323501461043e578063affed0e014610421578063d5624222146101e0578063e43f3433146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c26111ad565b6040516001600160a01b039091168152f35b5f80fd5b346100d4575f3660031901126100d4576001546001600160a01b0316801561019b5760249060206001600160a01b036101176101126111ad565b611200565b16604051938480926370a0823160e01b82523060048301525afa918215610190575f92610155575b506001600160801b03610153921690611293565b005b91506020823d602011610188575b8161017060209383610f96565b810103126100d4579051906001600160801b0361013f565b3d9150610163565b6040513d5f823e3d90fd5b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b346100d45760403660031901126100d4576004356001600160401b0381116100d457610210903690600401610e9d565b906024356001600160801b0381168082036100d45760015461023b906001600160a01b031615610ef2565b60045415801590610402575b15610384576102ee575b6004545f1981146102da576020938160017f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69301600455604051868101913060601b83526034820152603481526102a9605482610f96565b519020936102cf6001600160a01b036102c061125d565b16946040519384938885611095565b0390a2604051908152f35b634e487b7160e01b5f52601160045260245ffd5b6103356020826102fc6111ad565b6001600160a01b0361030d82611200565b16905f61031861125d565b6040516323b872dd60e01b81529687958694859360048501610fcf565b03925af1801561019057610350915f91610355575b50610ff9565b610251565b610377915060203d60201161037d575b61036f8183610f96565b810190610fb7565b8561034a565b503d610365565b60405162461bcd60e51b815260206004820152604a60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201527f6d657373616765207965743b20616e6420736f75726365206973206e6f7420696064820152693734ba34b0b634bd32b960b11b608482015260a490fd5b5061040b61125d565b6002546001600160a01b03918216911614610247565b346100d4575f3660031901126100d4576020600454604051908152f35b346100d45760203660031901126100d4576004356001600160401b0381116100d45736819003906004810160c06003198401126100d4576104906001600160a01b036104886111ad565b1633146110c3565b61049981611166565b306001600160a01b0390911603610a5a5760a4820135926022190192838112156100d4578201906004820135906001600160401b0382116100d4578160051b360360248401136100d4575f94919360e2193685900301929060605b8688101561070a576024600589901b87010135858112156100d4576004908701019760208901601f198a3603019260c084126100d45760405160a081018181106001600160401b038211176106f6576040528235815261055660408d01610ede565b906020810191825260608d01356001600160401b0381116100d4576020908e010136601f820112156100d45780359061058e82611278565b9161059c6040519384610f96565b80835236602082840101116100d4578f6080905f6020846105d0958260409801838a01378701015283860194855201610eca565b6060840190815297607f1901126100d45760405193604085018581106001600160401b038211176106f65760405260a08f01358086529e60c00135936001600160e01b0319851685036100d4576001986106ad6034605460209996876106d39a8c9a8b809b019182528260808201525197519251965191519063ffffffff60e01b905116908a6040519889958287019b8c526001600160601b03199060601b1660408701528051918291018787015e8401926001600160801b03199060801b16858401526064830152608482015203016014810184520182610f96565b5190206040519582879351918291018585015e8201908382015203018084520182610f96565b996106e8576106e19061155f565b01966104f4565b6106f1906113dc565b6106e1565b634e487b7160e01b5f52604160045260245ffd5b60208151910120916084820135908112156100d4578101906004820135926001600160401b0384116100d45760608402360360248401136100d4576060945f5b85811015610899576004606082028601016060601f1982360301126100d45760405190606082018281106001600160401b038211176106f657604052602081013591828152604082019961079d8b610ede565b92836020840152606001926107b184610eca565b6040819401526040519260208401918683526001600160601b03199060601b1660408501526001600160801b03199060801b166054840152604483526107f8606484610f96565b60405192828493516020819201602086015e83019060208201905f8252519283915e016020015f815203601f19810182526108339082610f96565b9861083d90611166565b6108468261117a565b61084f91611293565b6108589061117a565b6040519182526001600160801b0316602082015260407fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578391a160010161074a565b50855160208701206044840192906001600160a01b036108b885611166565b16610988575b6020946108ee60646108e76108e160035497602486013580990361095657611166565b97611166565b920161117a565b9060405194878601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261094b60b882610f96565b519020604051908152f35b886003557f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c0809308b6040518b8152a1611166565b61099184611166565b60015495906109a96001600160a01b03881615610ef2565b6001600160a01b03166001600160a01b0319969096168617600155851561019b57602460206001600160a01b036109e16101126111ad565b16604051928380926370a0823160e01b82523060048301525afa908115610190575f91610a27575b506020966001600160801b03610a20921690611293565b94506108be565b90506020813d602011610a52575b81610a4260209383610f96565b810103126100d457516020610a09565b3d9150610a35565b60405162461bcd60e51b815260206004820152601d60248201527f6163746f724964206d757374206265207468697320636f6e74726163740000006044820152606490fd5b346100d4575f3660031901126100d4576002546040516001600160a01b039091168152602090f35b346100d4575f3660031901126100d4575f546040516001600160a01b039091168152602090f35b346100d45760203660031901126100d457610b0c6004541515610f36565b6001600160a01b03610b1c61125d565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a2005b346100d45760203660031901126100d4576004356001600160801b038116908181036100d457600154610b87906001600160a01b031615610ef2565b81610bba575b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667602083604051908152a1005b906020610c0292610bc96111ad565b6001600160a01b03610bda82611200565b16905f610be561125d565b6040516323b872dd60e01b81529788958694859360048501610fcf565b03925af190811561019057610c416020927f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667945f91610c485750610ff9565b9150610b8d565b6103779150843d861161037d5761036f8183610f96565b346100d4575f3660031901126100d4576020600354604051908152f35b346100d45760403660031901126100d4576004356001600160a01b038116908190036100d4576024356001600160a01b03811691908290036100d457610ccb6001600160a01b036104886111ad565b60025490610ce26001600160a01b0383161561110f565b5f5491610cf86001600160a01b0384161561110f565b6001600160a01b03199081169190911760025516175f55005b346100d4575f3660031901126100d4576001546040516001600160a01b039091168152602090f35b346100d45760603660031901126100d4576024356001600160401b0381116100d457610d69903690600401610e9d565b90604435916001600160801b0383168084036100d457600154610d95906001600160a01b031615610ef2565b610da26004541515610f36565b610df2575b7fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f91610ded6001600160a01b03610ddc61125d565b169460405193849360043585611095565b0390a2005b610e3a91602084610e016111ad565b6001600160a01b03610e1282611200565b16905f610e1d61125d565b6040516323b872dd60e01b81529889958694859360048501610fcf565b03925af1928315610190577fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f93610e77915f91610e7e5750610ff9565b9150610da7565b610e97915060203d60201161037d5761036f8183610f96565b8661034a565b9181601f840112156100d4578235916001600160401b0383116100d457602083818601950101116100d457565b35906001600160801b03821682036100d457565b35906001600160a01b03821682036100d457565b15610ef957565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b15610f3d57565b60405162461bcd60e51b815260206004820152602b60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201526a1b595cdcd859d9481e595d60aa1b6064820152608490fd5b90601f801991011681019081106001600160401b038211176106f657604052565b908160209103126100d4575180151581036100d45790565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b1561100057565b60405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662057566172612066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b926040926110bc916001600160801b03939796978652606060208701526060860191611075565b9416910152565b156110ca57565b60405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520726f7574657200000000000000006044820152606490fd5b1561111657565b60405162461bcd60e51b815260206004820152602260248201527f696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e604482015261636560f01b6064820152608490fd5b356001600160a01b03811681036100d45790565b356001600160801b03811681036100d45790565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa908115610190575f916111d4575090565b6111f6915060203d6020116111f9575b6111ee8183610f96565b81019061118e565b90565b503d6111e4565b60405163088f50cf60e41b815290602090829060049082906001600160a01b03165afa908115610190575f9161123e575b506001600160a01b031690565b611257915060203d6020116111f9576111ee8183610f96565b5f611231565b5f54336001600160a01b0390911603611274573290565b3390565b6001600160401b0381116106f657601f01601f191660200190565b906001600160801b0316806112a6575050565b60209060446001600160a01b036112be6101126111ad565b60405163a9059cbb60e01b81526001600160a01b0390961660048701526024860193909352849283915f91165af1908115610190575f91611347575b501561130257565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207472616e7366657220575661726100000000000000006044820152606490fd5b611360915060203d60201161037d5761036f8183610f96565b5f6112fa565b903590601e19813603018212156100d457018035906001600160401b0382116100d4576020019181360383136100d457565b356001600160e01b0319811681036100d45790565b3d156113d7573d906113be82611278565b916113cc6040519384610f96565b82523d5f602084013e565b606090565b602081016113e981611166565b9061140160608401926113fb8461117a565b90611293565b5f546001600160a01b0316908161149a575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69061144f6114476040850185611366565b91909261117a565b60806001600160e01b031961146660a08801611398565b16956001600160801b03611487604051968796606088526060880191611075565b93166020850152013560408301520390a2565b5f916114a68392611166565b826115406114b76040890189611366565b6114c38993929361117a565b6114cf60a08c01611398565b604051639649744960e01b602082019081526001600160a01b03909816602482015260a060448201529485936001600160801b03916115129160c4870191611075565b9216606484015260808c013560848401526001600160e01b03191660a483015203601f198101835282610f96565b51926207a120f161154f6113ad565b5061155b575f80611413565b5050565b5f546001600160a01b0316806115d9575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117736115d46115a160208401611166565b6115ae6040850185611366565b6115bd6060879593950161117a565b9060405194859460018060a01b0316973585611095565b0390a2565b5f809183826115ea60208301611166565b6116686115fa6040850185611366565b92906001600160801b036116536116136060890161117a565b6040516374fad4ef60e01b60208201908152993560248201526001600160a01b03909516604486015260806064860152939586949360a486019190611075565b9116608483015203601f198101835282610f96565b51926207a120f16116776113ad565b50611682575f611570565b5056fea2646970667358221220bce46f8db7a45a91e6f4aaf7f3264e88d392541dfb781568d6e0b81aab4b4c1364736f6c634300081c0033","sourceMap":"403:9266:118:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806329336f3914610d3957806336a52a1814610d11578063485cc95514610c7c578063701da98e14610c5f578063704ed54214610b4b57806391d5a64c14610aee5780639cb3300514610ac75780639ce110d714610a9f5780639ed323501461043e578063affed0e014610421578063d5624222146101e0578063e43f3433146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c26111ad565b6040516001600160a01b039091168152f35b5f80fd5b346100d4575f3660031901126100d4576001546001600160a01b0316801561019b5760249060206001600160a01b036101176101126111ad565b611200565b16604051938480926370a0823160e01b82523060048301525afa918215610190575f92610155575b506001600160801b03610153921690611293565b005b91506020823d602011610188575b8161017060209383610f96565b810103126100d4579051906001600160801b0361013f565b3d9150610163565b6040513d5f823e3d90fd5b60405162461bcd60e51b815260206004820152601960248201527f70726f6772616d206973206e6f74207465726d696e61746564000000000000006044820152606490fd5b346100d45760403660031901126100d4576004356001600160401b0381116100d457610210903690600401610e9d565b906024356001600160801b0381168082036100d45760015461023b906001600160a01b031615610ef2565b60045415801590610402575b15610384576102ee575b6004545f1981146102da576020938160017f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69301600455604051868101913060601b83526034820152603481526102a9605482610f96565b519020936102cf6001600160a01b036102c061125d565b16946040519384938885611095565b0390a2604051908152f35b634e487b7160e01b5f52601160045260245ffd5b6103356020826102fc6111ad565b6001600160a01b0361030d82611200565b16905f61031861125d565b6040516323b872dd60e01b81529687958694859360048501610fcf565b03925af1801561019057610350915f91610355575b50610ff9565b610251565b610377915060203d60201161037d575b61036f8183610f96565b810190610fb7565b8561034a565b503d610365565b60405162461bcd60e51b815260206004820152604a60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201527f6d657373616765207965743b20616e6420736f75726365206973206e6f7420696064820152693734ba34b0b634bd32b960b11b608482015260a490fd5b5061040b61125d565b6002546001600160a01b03918216911614610247565b346100d4575f3660031901126100d4576020600454604051908152f35b346100d45760203660031901126100d4576004356001600160401b0381116100d45736819003906004810160c06003198401126100d4576104906001600160a01b036104886111ad565b1633146110c3565b61049981611166565b306001600160a01b0390911603610a5a5760a4820135926022190192838112156100d4578201906004820135906001600160401b0382116100d4578160051b360360248401136100d4575f94919360e2193685900301929060605b8688101561070a576024600589901b87010135858112156100d4576004908701019760208901601f198a3603019260c084126100d45760405160a081018181106001600160401b038211176106f6576040528235815261055660408d01610ede565b906020810191825260608d01356001600160401b0381116100d4576020908e010136601f820112156100d45780359061058e82611278565b9161059c6040519384610f96565b80835236602082840101116100d4578f6080905f6020846105d0958260409801838a01378701015283860194855201610eca565b6060840190815297607f1901126100d45760405193604085018581106001600160401b038211176106f65760405260a08f01358086529e60c00135936001600160e01b0319851685036100d4576001986106ad6034605460209996876106d39a8c9a8b809b019182528260808201525197519251965191519063ffffffff60e01b905116908a6040519889958287019b8c526001600160601b03199060601b1660408701528051918291018787015e8401926001600160801b03199060801b16858401526064830152608482015203016014810184520182610f96565b5190206040519582879351918291018585015e8201908382015203018084520182610f96565b996106e8576106e19061155f565b01966104f4565b6106f1906113dc565b6106e1565b634e487b7160e01b5f52604160045260245ffd5b60208151910120916084820135908112156100d4578101906004820135926001600160401b0384116100d45760608402360360248401136100d4576060945f5b85811015610899576004606082028601016060601f1982360301126100d45760405190606082018281106001600160401b038211176106f657604052602081013591828152604082019961079d8b610ede565b92836020840152606001926107b184610eca565b6040819401526040519260208401918683526001600160601b03199060601b1660408501526001600160801b03199060801b166054840152604483526107f8606484610f96565b60405192828493516020819201602086015e83019060208201905f8252519283915e016020015f815203601f19810182526108339082610f96565b9861083d90611166565b6108468261117a565b61084f91611293565b6108589061117a565b6040519182526001600160801b0316602082015260407fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd6578391a160010161074a565b50855160208701206044840192906001600160a01b036108b885611166565b16610988575b6020946108ee60646108e76108e160035497602486013580990361095657611166565b97611166565b920161117a565b9060405194878601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261094b60b882610f96565b519020604051908152f35b886003557f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c0809308b6040518b8152a1611166565b61099184611166565b60015495906109a96001600160a01b03881615610ef2565b6001600160a01b03166001600160a01b0319969096168617600155851561019b57602460206001600160a01b036109e16101126111ad565b16604051928380926370a0823160e01b82523060048301525afa908115610190575f91610a27575b506020966001600160801b03610a20921690611293565b94506108be565b90506020813d602011610a52575b81610a4260209383610f96565b810103126100d457516020610a09565b3d9150610a35565b60405162461bcd60e51b815260206004820152601d60248201527f6163746f724964206d757374206265207468697320636f6e74726163740000006044820152606490fd5b346100d4575f3660031901126100d4576002546040516001600160a01b039091168152602090f35b346100d4575f3660031901126100d4575f546040516001600160a01b039091168152602090f35b346100d45760203660031901126100d457610b0c6004541515610f36565b6001600160a01b03610b1c61125d565b167f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860206040516004358152a2005b346100d45760203660031901126100d4576004356001600160801b038116908181036100d457600154610b87906001600160a01b031615610ef2565b81610bba575b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667602083604051908152a1005b906020610c0292610bc96111ad565b6001600160a01b03610bda82611200565b16905f610be561125d565b6040516323b872dd60e01b81529788958694859360048501610fcf565b03925af190811561019057610c416020927f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c054236667945f91610c485750610ff9565b9150610b8d565b6103779150843d861161037d5761036f8183610f96565b346100d4575f3660031901126100d4576020600354604051908152f35b346100d45760403660031901126100d4576004356001600160a01b038116908190036100d4576024356001600160a01b03811691908290036100d457610ccb6001600160a01b036104886111ad565b60025490610ce26001600160a01b0383161561110f565b5f5491610cf86001600160a01b0384161561110f565b6001600160a01b03199081169190911760025516175f55005b346100d4575f3660031901126100d4576001546040516001600160a01b039091168152602090f35b346100d45760603660031901126100d4576024356001600160401b0381116100d457610d69903690600401610e9d565b90604435916001600160801b0383168084036100d457600154610d95906001600160a01b031615610ef2565b610da26004541515610f36565b610df2575b7fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f91610ded6001600160a01b03610ddc61125d565b169460405193849360043585611095565b0390a2005b610e3a91602084610e016111ad565b6001600160a01b03610e1282611200565b16905f610e1d61125d565b6040516323b872dd60e01b81529889958694859360048501610fcf565b03925af1928315610190577fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f93610e77915f91610e7e5750610ff9565b9150610da7565b610e97915060203d60201161037d5761036f8183610f96565b8661034a565b9181601f840112156100d4578235916001600160401b0383116100d457602083818601950101116100d457565b35906001600160801b03821682036100d457565b35906001600160a01b03821682036100d457565b15610ef957565b60405162461bcd60e51b81526020600482015260156024820152741c1c9bd9dc985b481a5cc81d195c9b5a5b985d1959605a1b6044820152606490fd5b15610f3d57565b60405162461bcd60e51b815260206004820152602b60248201527f696e697469616c697a6572206861736e2774206372656174656420696e69742060448201526a1b595cdcd859d9481e595d60aa1b6064820152608490fd5b90601f801991011681019081106001600160401b038211176106f657604052565b908160209103126100d4575180151581036100d45790565b6001600160a01b039182168152911660208201526001600160801b03909116604082015260600190565b1561100057565b60405162461bcd60e51b815260206004820152604160248201527f6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f7560448201527f6e74206f662057566172612066726f6d20736f7572636520746f20726f7574656064820152603960f91b608482015260a490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b926040926110bc916001600160801b03939796978652606060208701526060860191611075565b9416910152565b156110ca57565b60405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520726f7574657200000000000000006044820152606490fd5b1561111657565b60405162461bcd60e51b815260206004820152602260248201527f696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e604482015261636560f01b6064820152608490fd5b356001600160a01b03811681036100d45790565b356001600160801b03811681036100d45790565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa908115610190575f916111d4575090565b6111f6915060203d6020116111f9575b6111ee8183610f96565b81019061118e565b90565b503d6111e4565b60405163088f50cf60e41b815290602090829060049082906001600160a01b03165afa908115610190575f9161123e575b506001600160a01b031690565b611257915060203d6020116111f9576111ee8183610f96565b5f611231565b5f54336001600160a01b0390911603611274573290565b3390565b6001600160401b0381116106f657601f01601f191660200190565b906001600160801b0316806112a6575050565b60209060446001600160a01b036112be6101126111ad565b60405163a9059cbb60e01b81526001600160a01b0390961660048701526024860193909352849283915f91165af1908115610190575f91611347575b501561130257565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207472616e7366657220575661726100000000000000006044820152606490fd5b611360915060203d60201161037d5761036f8183610f96565b5f6112fa565b903590601e19813603018212156100d457018035906001600160401b0382116100d4576020019181360383136100d457565b356001600160e01b0319811681036100d45790565b3d156113d7573d906113be82611278565b916113cc6040519384610f96565b82523d5f602084013e565b606090565b602081016113e981611166565b9061140160608401926113fb8461117a565b90611293565b5f546001600160a01b0316908161149a575b50507fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69061144f6114476040850185611366565b91909261117a565b60806001600160e01b031961146660a08801611398565b16956001600160801b03611487604051968796606088526060880191611075565b93166020850152013560408301520390a2565b5f916114a68392611166565b826115406114b76040890189611366565b6114c38993929361117a565b6114cf60a08c01611398565b604051639649744960e01b602082019081526001600160a01b03909816602482015260a060448201529485936001600160801b03916115129160c4870191611075565b9216606484015260808c013560848401526001600160e01b03191660a483015203601f198101835282610f96565b51926207a120f161154f6113ad565b5061155b575f80611413565b5050565b5f546001600160a01b0316806115d9575b507f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117736115d46115a160208401611166565b6115ae6040850185611366565b6115bd6060879593950161117a565b9060405194859460018060a01b0316973585611095565b0390a2565b5f809183826115ea60208301611166565b6116686115fa6040850185611366565b92906001600160801b036116536116136060890161117a565b6040516374fad4ef60e01b60208201908152993560248201526001600160a01b03909516604486015260806064860152939586949360a486019190611075565b9116608483015203601f198101835282610f96565b51926207a120f16116776113ad565b50611682575f611570565b5056fea2646970667358221220bce46f8db7a45a91e6f4aaf7f3264e88d392541dfb781568d6e0b81aab4b4c1364736f6c634300081c0033","sourceMap":"403:9266:118:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;-1:-1:-1;;;;;403:9266:118;1633:23;;403:9266;;3811:41;;403:9266;-1:-1:-1;;;;;3811:16:118;3818:8;;:::i;:::-;3811:16;:::i;:::-;403:9266;;;;;;;;;;3811:41;;3846:4;403:9266;3811:41;;403:9266;3811:41;;;;;;;403:9266;3811:41;;;403:9266;;-1:-1:-1;;;;;3888:16:118;403:9266;;3888:16;;:::i;:::-;403:9266;3811:41;;;403:9266;3811:41;;403:9266;3811:41;;;;;;403:9266;3811:41;;;:::i;:::-;;;403:9266;;;;;;;-1:-1:-1;;;;;3811:41:118;;;;;-1:-1:-1;3811:41:118;;;403:9266;;;;;;;;;;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;2492:57;;-1:-1:-1;;;;;403:9266:118;2500:23;2492:57;:::i;:::-;403:9266;;2204:9;;;:37;;;403:9266;;;;1103:259;;403:9266;;;-1:-1:-1;;403:9266:118;;;;;;;2500:9;3049:57;403:9266;;;;;;2992:40;;;3017:4;;403:9266;;;;;;;;;2992:40;;;;;;:::i;:::-;403:9266;2982:51;;;3049:57;-1:-1:-1;;;;;3078:9:118;;:::i;:::-;403:9266;;;;3049:57;;;;;;:::i;:::-;;;;403:9266;;;;;;;;;;;;;;;;;;1103:259;1191:61;403:9266;1154:8;;;:::i;:::-;-1:-1:-1;;;;;1191:18:118;;;:::i;:::-;403:9266;1223:9;403:9266;1223:9;;:::i;:::-;403:9266;;-1:-1:-1;;;1191:61:118;;403:9266;;;;;;;;1191:61;;;:::i;:::-;;;;;;;;;1266:85;1191:61;403:9266;1191:61;;;1103:259;1266:85;;:::i;:::-;1103:259;;1191:61;;;;403:9266;1191:61;403:9266;1191:61;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;403:9266;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:9266:118;;;;;;;2204:37;2217:9;;;:::i;:::-;2230:11;403:9266;-1:-1:-1;;;;;403:9266:118;;;;;2217:24;2204:37;;403:9266;;;;;;-1:-1:-1;;403:9266:118;;;;;;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;860:59;-1:-1:-1;;;;;882:8:118;;:::i;:::-;403:9266;868:10;:22;860:59;:::i;:::-;4564:19;;;:::i;:::-;4595:4;-1:-1:-1;;;;;403:9266:118;;;4564:36;403:9266;;4733:20;;;403:9266;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;;5828:27;;-1:-1:-1;;403:9266:118;;;;;;5828:27;403:9266;5908:3;5886:20;;;;;;403:9266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4733:20;403:9266;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;4733:20;403:9266;;;;;;;;;;;-1:-1:-1;;;;;;403:9266:118;;;;;;;;4318:243:122;403:9266:118;;;;;;;;;;;;;;;;;;;;;;;;;4417:15:122;;403:9266:118;;;;;;;;;;;;;;;4318:243:122;;;;;;403:9266:118;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;;4318:243:122;;;;;;;;;;:::i;:::-;403:9266:118;4295:276:122;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6144:28;;;6214:7;;;:::i;:::-;403:9266;5871:13;;;6140:162;6279:7;;;:::i;:::-;6140:162;;403:9266;;;;;;;;;;;;5886:20;403:9266;;;;;6329:25;4848:23;;;;403:9266;;;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;8077:13;403:9266;8112:3;8092:18;;;;;;403:9266;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;8303:65:122;403:9266:118;8303:65:122;;403:9266:118;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;8303:65:122;;;;;;:::i;:::-;403:9266:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8297:17;;;;:::i;:::-;8316:11;;;:::i;:::-;;;;:::i;:::-;8378;;;:::i;:::-;403:9266;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;8348:42;;;403:9266;;8077:13;;8092:18;-1:-1:-1;403:9266:118;;;;;8418:27;403:9266;4932:21;;;;-1:-1:-1;;;;;4932:21:118;;;:::i;:::-;403:9266;4928:102;;8072:329;403:9266;;5422:26;8303:65:122;5387:21:118;5316:19;5095:9;403:9266;5108:24;;;;403:9266;5095:37;;;5091:110;;5316:19;:::i;:::-;5387:21;;:::i;:::-;5422:26;;;:::i;:::-;403:9266;;;5047:101:122;;;;403:9266:118;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;;;5047:101:122;;;;;;:::i;:::-;403:9266:118;5024:134:122;;403:9266:118;;;;;;5091:110;403:9266;5095:9;403:9266;8978:23;403:9266;;;;;;8978:23;5316:19;:::i;4928:102::-;4997:21;;;:::i;:::-;403:9266;;;;2492:57;-1:-1:-1;;;;;403:9266:118;;2500:23;2492:57;:::i;:::-;-1:-1:-1;;;;;403:9266:118;-1:-1:-1;;;;;;403:9266:118;;;;;;;;1633:23;;403:9266;;3811:41;403:9266;-1:-1:-1;;;;;3811:16:118;3818:8;;:::i;3811:16::-;403:9266;;;;;;;;;;3811:41;;4595:4;403:9266;3811:41;;403:9266;3811:41;;;;;;;403:9266;3811:41;;;4928:102;403:9266;;;-1:-1:-1;;;;;3888:16:118;403:9266;;3888:16;;:::i;:::-;4928:102;;;;3811:41;;;403:9266;3811:41;;403:9266;3811:41;;;;;;403:9266;3811:41;;;:::i;:::-;;;403:9266;;;;;;3811:41;;;;;-1:-1:-1;3811:41:118;;403:9266;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;664:26;403:9266;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;1874:65;403:9266;;1882:9;;1874:65;:::i;:::-;-1:-1:-1;;;;;3536:9:118;;:::i;:::-;403:9266;3501:45;403:9266;;;;;;;3501:45;403:9266;;;;;;;-1:-1:-1;;403:9266:118;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;2492:57;;-1:-1:-1;;;;;403:9266:118;2500:23;2492:57;:::i;:::-;1107:10;1103:259;;403:9266;3667:39;403:9266;;;;;;;3667:39;403:9266;1103:259;1154:8;403:9266;1191:61;1154:8;;;:::i;:::-;-1:-1:-1;;;;;1191:18:118;;;:::i;:::-;403:9266;1223:9;403:9266;1223:9;;:::i;:::-;403:9266;;-1:-1:-1;;;1191:61:118;;403:9266;;;;;;;;1191:61;;;:::i;:::-;;;;;;;;;;1266:85;403:9266;1191:61;3667:39;1191:61;403:9266;1191:61;;;1266:85;;:::i;:::-;1103:259;;;;1191:61;;;;;;;;;;;;;;:::i;403:9266::-;;;;;;-1:-1:-1;;403:9266:118;;;;;696:24;403:9266;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;860:59;-1:-1:-1;;;;;882:8:118;;:::i;860:59::-;4066:11;403:9266;;4058:72;-1:-1:-1;;;;;403:9266:118;;4066:25;4058:72;:::i;:::-;403:9266;;;4140:68;-1:-1:-1;;;;;403:9266:118;;4148:21;4140:68;:::i;:::-;-1:-1:-1;;;;;;403:9266:118;;;;;;;4066:11;403:9266;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;-1:-1:-1;;403:9266:118;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;2492:57;;-1:-1:-1;;;;;403:9266:118;2500:23;2492:57;:::i;:::-;1874:65;403:9266;;1882:9;;1874:65;:::i;:::-;1103:259;;403:9266;3338:63;;;-1:-1:-1;;;;;3373:9:118;;:::i;:::-;403:9266;;;;;;;;;3338:63;;:::i;:::-;;;;403:9266;1103:259;1191:61;1154:8;403:9266;1154:8;;;:::i;:::-;-1:-1:-1;;;;;1191:18:118;;;:::i;:::-;403:9266;1223:9;403:9266;1223:9;;:::i;:::-;403:9266;;-1:-1:-1;;;1191:61:118;;403:9266;;;;;;;;1191:61;;;:::i;:::-;;;;;;;;;;3338:63;1191:61;1266:85;1191:61;403:9266;1191:61;;;1266:85;;:::i;:::-;1103:259;;;;1191:61;;;;403:9266;1191:61;403:9266;1191:61;;;;;;;:::i;:::-;;;;403:9266;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;403:9266:118;;;;;;:::o;:::-;;;-1:-1:-1;;;;;403:9266:118;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;;;;-1:-1:-1;403:9266:118;;;;;;;;-1:-1:-1;;403:9266:118;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;403:9266:118;;;;;;;;;;;;;;;;;-1:-1:-1;;;403:9266:118;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;:::o;:::-;;-1:-1:-1;;;;;403:9266:118;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;:::o;2606:108::-;403:9266;;-1:-1:-1;;;2671:36:118;;;403:9266;2671:36;403:9266;2692:4;2671:36;;;;;;;-1:-1:-1;2671:36:118;;;2664:43;2606:108;:::o;2671:36::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;2606:108;:::o;2671:36::-;;;;;9048:182;403:9266;;-1:-1:-1;;;9150:33:118;;403:9266;9150:33;;403:9266;;9150:33;;403:9266;;-1:-1:-1;;;;;403:9266:118;9150:33;;;;;;;-1:-1:-1;9150:33:118;;;9048:182;-1:-1:-1;;;;;;403:9266:118;;9048:182::o;9150:33::-;;;;;;;;;;;;;;:::i;:::-;;;;9236:182;403:9266;;9300:10;-1:-1:-1;;;;;403:9266:118;;;9300:21;403:9266;;9344:9;9337:16;:::o;9296:116::-;9300:10;9384:17;:::o;403:9266::-;-1:-1:-1;;;;;403:9266:118;;;;;;-1:-1:-1;;403:9266:118;;;;:::o;9424:243::-;;-1:-1:-1;;;;;403:9266:118;9506:10;9502:159;;9424:243;;:::o;9502:159::-;403:9266;;9547:45;-1:-1:-1;;;;;9547:16:118;9554:8;;:::i;9547:16::-;403:9266;;-1:-1:-1;;;9547:45:118;;-1:-1:-1;;;;;403:9266:118;;;9547:45;;;403:9266;;;;;;;;;;;;9515:1;;403:9266;9547:45;;;;;;;9515:1;9547:45;;;9502:159;403:9266;;;;9424:243::o;403:9266::-;;;-1:-1:-1;;;403:9266:118;;;9547:45;403:9266;;;;;;;;;9547:45;403:9266;;;;;;9547:45;;;;403:9266;9547:45;403:9266;9547:45;;;;;;;:::i;:::-;;;;403:9266;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;403:9266:118;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;403:9266:118;;;;:::o;:::-;;;:::o;7148:784::-;7240:20;;;;;;:::i;:::-;7262:14;;;;;;;;;:::i;:::-;;;:::i;:::-;7292:7;403:9266;-1:-1:-1;;;;;403:9266:118;;;7288:529;;7148:784;7838:16;;7832:93;7838:16;7856:14;7838:16;;;;;;:::i;:::-;7856:14;;;;:::i;:::-;7872:21;-1:-1:-1;;;;;;7898:26:118;;;;;:::i;:::-;403:9266;;-1:-1:-1;;;;;403:9266:118;7838:16;403:9266;;;;7262:14;403:9266;;7262:14;403:9266;;;;:::i;:::-;;;7240:20;403:9266;;;7872:21;403:9266;7838:16;403:9266;;;7832:93;;;7148:784::o;7288:529::-;7292:7;7446:20;;;;;:::i;:::-;7484:16;7353:279;7484:16;;;;;;:::i;:::-;7518:14;;;;;;:::i;:::-;7592:26;;;;;:::i;:::-;7484:16;403:9266;-1:-1:-1;;;7240:20:118;7353:279;;;;;-1:-1:-1;;;;;403:9266:118;;;7353:279;;;403:9266;;;;;;;;;-1:-1:-1;;;;;403:9266:118;;;;;;;;:::i;:::-;;;;;;;7550:21;;;403:9266;;;;;-1:-1:-1;;;;;;403:9266:118;;;;;7353:279;-1:-1:-1;;7353:279:118;;;;;;:::i;:::-;7704:36;;7722:7;7704:36;;;:::i;:::-;;7755:52;;7288:529;;;;7755:52;7786:7;;:::o;6420:653::-;6505:7;403:9266;-1:-1:-1;;;;;403:9266:118;;6501:474;;6420:653;7011:20;6990:76;;7011:20;;;;;:::i;:::-;7033:16;;;;;;:::i;:::-;7051:14;;;;;;;;:::i;:::-;403:9266;7033:16;403:9266;;;;;;;;;;;;6990:76;;:::i;:::-;;;;6420:653::o;6501:474::-;6505:7;6690:20;;;;;;;;;:::i;:::-;6566:224;6728:16;;;;;;:::i;:::-;6762:14;;-1:-1:-1;;;;;403:9266:118;6762:14;;;;;:::i;:::-;6728:16;403:9266;-1:-1:-1;;;6690:20:118;6566:224;;;;;403:9266;;6566:224;;;403:9266;-1:-1:-1;;;;;403:9266:118;;;;;;;;;;;;;;;;;;;;;6566:224;403:9266;:::i;:::-;;;;;;;6566:224;403:9266;;6566:224;;;;;;:::i;:::-;6862:36;;6880:7;6862:36;;;:::i;:::-;;6913:52;;6501:474;;;6913:52;6944:7;:::o","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","decoder()":"9cb33005","executableBalanceTopUp(uint128)":"704ed542","inheritor()":"36a52a18","initialize(address,address)":"485cc955","initializer()":"9ce110d7","nonce()":"affed0e0","performStateTransition((address,bytes32,address,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[]))":"9ed32350","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","stateHash()":"701da98e","transferLockedValueToInheritor()":"e43f3433"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inheritor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initializer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_decoder\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition\",\"name\":\"_transition\",\"type\":\"tuple\"}],\"name\":\"performStateTransition\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferLockedValueToInheritor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"initializer\":{\"details\":\"This nonce is the source for message ids unique generations. Must be bumped on each send. Zeroed nonce is always represent init message by eligible account.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0xf55d01dac75cffdabec6833a79bf3be0c108fc0db10e273daf7adfd3e9e59dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://540002a50a2a1a2b9dafffb976178e55adbf8d3a28db462c69f996921479c6b0\",\"dweb:/ipfs/QmQNAFyMf2FW3U1giM4Yej3zzd1pnxMtAA5GoADj4hTYYD\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0\",\"dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1899463c32e174ebde503846dd1b40ddb6d6ba15e21d68b21b8151e97af35a5e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3c91227968491548c006b70f1de87bb1b67a83d72d05faf19ba09ddfe27de3f6\",\"dweb:/ipfs/QmeXXQd2Wk1Jp1rvbysD1hZb3QVXR3sPxkU8UKBfwrKmkm\"]},\"src/IMirrorDecoder.sol\":{\"keccak256\":\"0xdc8493f52a809ac9470823d4c13f329845a10aa90a73bddd791137f3bd8849ac\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fb625d21f8554f1a973a4ace5b5db4cc696b71605592a22eab44576d020ff70d\",\"dweb:/ipfs/Qma98jtpbJ4zYoBHwsCCUtgkeEVZsPFYUZiGwnPSpKsdqx\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x5f6e8be4d5738e41071deb350bd50279df85b4df544d6abe87faaf5ef6a399cf\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3c8df2e9d20982b1f25e3be114acc735e597ef1cecd8b9f4528080ca982e618b\",\"dweb:/ipfs/QmRZQrTE6o5y5KWdRzE4Usyf3tdFjqs1CGu8kad2PFWEFW\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0x494ced7f53fdc22cf426db303e63345a1022aff1c2ddcb378a5cfd8a1fb8f2d9\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://11392c8f9e2a34094e8ace4f34fadce3f1d6a53679797e69d251fead6383969f\",\"dweb:/ipfs/QmRsY5xdxWgtmHArNQqBScABFyMehg1HcoeTjjeysazv1E\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xa95dec92e5eadb21249fdec7b3246d666e2fbaf6d994030bb75176c642fa15de\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c05bd2a8dacd478bea5797e034f782d8859dcf9a047d1a8250f71f587d9b7831\",\"dweb:/ipfs/QmSTqy7XvzeDpAqtVkSXXCwtyXspe2zkFqVeuDamguoqRF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[],"stateMutability":"view","type":"function","name":"decoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"executableBalanceTopUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"inheritor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_initializer","type":"address"},{"internalType":"address","name":"_decoder","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initializer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Gear.StateTransition","name":"_transition","type":"tuple","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}],"stateMutability":"nonpayable","type":"function","name":"performStateTransition","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"transferLockedValueToInheritor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0xf55d01dac75cffdabec6833a79bf3be0c108fc0db10e273daf7adfd3e9e59dae","urls":["bzz-raw://540002a50a2a1a2b9dafffb976178e55adbf8d3a28db462c69f996921479c6b0","dweb:/ipfs/QmQNAFyMf2FW3U1giM4Yej3zzd1pnxMtAA5GoADj4hTYYD"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330","urls":["bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf","dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed","urls":["bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0","dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575","urls":["bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e","dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1899463c32e174ebde503846dd1b40ddb6d6ba15e21d68b21b8151e97af35a5e","urls":["bzz-raw://3c91227968491548c006b70f1de87bb1b67a83d72d05faf19ba09ddfe27de3f6","dweb:/ipfs/QmeXXQd2Wk1Jp1rvbysD1hZb3QVXR3sPxkU8UKBfwrKmkm"],"license":"UNLICENSED"},"src/IMirrorDecoder.sol":{"keccak256":"0xdc8493f52a809ac9470823d4c13f329845a10aa90a73bddd791137f3bd8849ac","urls":["bzz-raw://fb625d21f8554f1a973a4ace5b5db4cc696b71605592a22eab44576d020ff70d","dweb:/ipfs/Qma98jtpbJ4zYoBHwsCCUtgkeEVZsPFYUZiGwnPSpKsdqx"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x5f6e8be4d5738e41071deb350bd50279df85b4df544d6abe87faaf5ef6a399cf","urls":["bzz-raw://3c8df2e9d20982b1f25e3be114acc735e597ef1cecd8b9f4528080ca982e618b","dweb:/ipfs/QmRZQrTE6o5y5KWdRzE4Usyf3tdFjqs1CGu8kad2PFWEFW"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0x494ced7f53fdc22cf426db303e63345a1022aff1c2ddcb378a5cfd8a1fb8f2d9","urls":["bzz-raw://11392c8f9e2a34094e8ace4f34fadce3f1d6a53679797e69d251fead6383969f","dweb:/ipfs/QmRsY5xdxWgtmHArNQqBScABFyMehg1HcoeTjjeysazv1E"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xa95dec92e5eadb21249fdec7b3246d666e2fbaf6d994030bb75176c642fa15de","urls":["bzz-raw://c05bd2a8dacd478bea5797e034f782d8859dcf9a047d1a8250f71f587d9b7831","dweb:/ipfs/QmSTqy7XvzeDpAqtVkSXXCwtyXspe2zkFqVeuDamguoqRF"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":67047,"contract":"src/Mirror.sol:Mirror","label":"decoder","offset":0,"slot":"0","type":"t_address"},{"astId":67049,"contract":"src/Mirror.sol:Mirror","label":"inheritor","offset":0,"slot":"1","type":"t_address"},{"astId":67052,"contract":"src/Mirror.sol:Mirror","label":"initializer","offset":0,"slot":"2","type":"t_address"},{"astId":67054,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"3","type":"t_bytes32"},{"astId":67056,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"4","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":67774,"exportedSymbols":{"Clones":[42512],"Gear":[70080],"IMirror":[65178],"IMirrorDecoder":[65215],"IMirrorProxy":[65223],"IRouter":[65486],"IWrappedVara":[65497],"Mirror":[67773]},"nodeType":"SourceUnit","src":"39:9631:118","nodes":[{"id":67029,"nodeType":"PragmaDirective","src":"39:24:118","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":67031,"nodeType":"ImportDirective","src":"65:48:118","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":67774,"sourceUnit":65224,"symbolAliases":[{"foreign":{"id":67030,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65223,"src":"73:12:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67033,"nodeType":"ImportDirective","src":"114:38:118","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":67774,"sourceUnit":65179,"symbolAliases":[{"foreign":{"id":67032,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65178,"src":"122:7:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67035,"nodeType":"ImportDirective","src":"153:38:118","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":67774,"sourceUnit":65487,"symbolAliases":[{"foreign":{"id":67034,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65486,"src":"161:7:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67037,"nodeType":"ImportDirective","src":"192:48:118","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":67774,"sourceUnit":65498,"symbolAliases":[{"foreign":{"id":67036,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65497,"src":"200:12:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67039,"nodeType":"ImportDirective","src":"241:52:118","nodes":[],"absolutePath":"src/IMirrorDecoder.sol","file":"./IMirrorDecoder.sol","nameLocation":"-1:-1:-1","scope":67774,"sourceUnit":65216,"symbolAliases":[{"foreign":{"id":67038,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65215,"src":"249:14:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67041,"nodeType":"ImportDirective","src":"294:64:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":67774,"sourceUnit":42513,"symbolAliases":[{"foreign":{"id":67040,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42512,"src":"302:6:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67043,"nodeType":"ImportDirective","src":"359:42:118","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":67774,"sourceUnit":70081,"symbolAliases":[{"foreign":{"id":67042,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"367:4:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67773,"nodeType":"ContractDefinition","src":"403:9266:118","nodes":[{"id":67047,"nodeType":"VariableDeclaration","src":"436:22:118","nodes":[],"baseFunctions":[65131],"constant":false,"functionSelector":"9cb33005","mutability":"mutable","name":"decoder","nameLocation":"451:7:118","scope":67773,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67046,"name":"address","nodeType":"ElementaryTypeName","src":"436:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":67049,"nodeType":"VariableDeclaration","src":"464:24:118","nodes":[],"baseFunctions":[65116],"constant":false,"functionSelector":"36a52a18","mutability":"mutable","name":"inheritor","nameLocation":"479:9:118","scope":67773,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67048,"name":"address","nodeType":"ElementaryTypeName","src":"464:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":67052,"nodeType":"VariableDeclaration","src":"664:26:118","nodes":[],"constant":false,"documentation":{"id":67050,"nodeType":"StructuredDocumentation","src":"494:165:118","text":"@dev This nonce is the source for message ids unique generations. Must be bumped on each send. Zeroed nonce is always represent init message by eligible account."},"functionSelector":"9ce110d7","mutability":"mutable","name":"initializer","nameLocation":"679:11:118","scope":67773,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67051,"name":"address","nodeType":"ElementaryTypeName","src":"664:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":67054,"nodeType":"VariableDeclaration","src":"696:24:118","nodes":[],"baseFunctions":[65111],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"711:9:118","scope":67773,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67053,"name":"bytes32","nodeType":"ElementaryTypeName","src":"696:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":67056,"nodeType":"VariableDeclaration","src":"726:20:118","nodes":[],"baseFunctions":[65121],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"741:5:118","scope":67773,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":67055,"name":"uint256","nodeType":"ElementaryTypeName","src":"726:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":67070,"nodeType":"ModifierDefinition","src":"828:109:118","nodes":[],"body":{"id":67069,"nodeType":"Block","src":"850:87:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":67060,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"868:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":67061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"872:6:118","memberName":"sender","nodeType":"MemberAccess","src":"868:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":67062,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67178,"src":"882:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"882:8:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"868:22:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63616c6c6572206973206e6f742074686520726f75746572","id":67065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"892:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_198bece7548b89eb58a1e57e2a5c5ba93b63a70943a48214dc1508db322b92d3","typeString":"literal_string \"caller is not the router\""},"value":"caller is not the router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_198bece7548b89eb58a1e57e2a5c5ba93b63a70943a48214dc1508db322b92d3","typeString":"literal_string \"caller is not the router\""}],"id":67059,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"860:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"860:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67067,"nodeType":"ExpressionStatement","src":"860:59:118"},{"id":67068,"nodeType":"PlaceholderStatement","src":"929:1:118"}]},"documentation":{"id":67057,"nodeType":"StructuredDocumentation","src":"753:70:118","text":"@dev Only the router can call functions marked with this modifier."},"name":"onlyRouter","nameLocation":"837:10:118","parameters":{"id":67058,"nodeType":"ParameterList","parameters":[],"src":"847:2:118"},"virtual":false,"visibility":"internal"},{"id":67104,"nodeType":"ModifierDefinition","src":"1053:326:118","nodes":[],"body":{"id":67103,"nodeType":"Block","src":"1093:286:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":67077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67075,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67073,"src":"1107:5:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":67076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1116:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1107:10:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67101,"nodeType":"IfStatement","src":"1103:259:118","trueBody":{"id":67100,"nodeType":"Block","src":"1119:243:118","statements":[{"assignments":[67079],"declarations":[{"constant":false,"id":67079,"mutability":"mutable","name":"routerAddr","nameLocation":"1141:10:118","nodeType":"VariableDeclaration","scope":67100,"src":"1133:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67078,"name":"address","nodeType":"ElementaryTypeName","src":"1133:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":67082,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":67080,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67178,"src":"1154:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1154:8:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1133:29:118"},{"assignments":[67084],"declarations":[{"constant":false,"id":67084,"mutability":"mutable","name":"success","nameLocation":"1181:7:118","nodeType":"VariableDeclaration","scope":67100,"src":"1176:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":67083,"name":"bool","nodeType":"ElementaryTypeName","src":"1176:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":67094,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":67089,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67743,"src":"1223:7:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1223:9:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67091,"name":"routerAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67079,"src":"1234:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67092,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67073,"src":"1246:5:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":67086,"name":"routerAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67079,"src":"1198:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67085,"name":"_wvara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67724,"src":"1191:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_contract$_IWrappedVara_$65497_$","typeString":"function (address) view returns (contract IWrappedVara)"}},"id":67087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1191:18:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$65497","typeString":"contract IWrappedVara"}},"id":67088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1210:12:118","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43812,"src":"1191:31:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":67093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1191:61:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"1176:76:118"},{"expression":{"arguments":[{"id":67096,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67084,"src":"1274:7:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572206e6f6e2d7a65726f20616d6f756e74206f662057566172612066726f6d20736f7572636520746f20726f75746572","id":67097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1283:67:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_89834f4f5b676caeda9aeacc6e70651fe8c874cb9d7867ce1578400f765c69dd","typeString":"literal_string \"failed to transfer non-zero amount of WVara from source to router\""},"value":"failed to transfer non-zero amount of WVara from source to router"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_89834f4f5b676caeda9aeacc6e70651fe8c874cb9d7867ce1578400f765c69dd","typeString":"literal_string \"failed to transfer non-zero amount of WVara from source to router\""}],"id":67095,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1266:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1266:85:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67099,"nodeType":"ExpressionStatement","src":"1266:85:118"}]}},{"id":67102,"nodeType":"PlaceholderStatement","src":"1371:1:118"}]},"documentation":{"id":67071,"nodeType":"StructuredDocumentation","src":"943:105:118","text":"@dev Non-zero value must be transferred from source to router in functions marked with this modifier."},"name":"retrievingValue","nameLocation":"1062:15:118","parameters":{"id":67074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67073,"mutability":"mutable","name":"value","nameLocation":"1086:5:118","nodeType":"VariableDeclaration","scope":67104,"src":"1078:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":67072,"name":"uint128","nodeType":"ElementaryTypeName","src":"1078:7:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1077:15:118"},"virtual":false,"visibility":"internal"},{"id":67119,"nodeType":"ModifierDefinition","src":"1589:115:118","nodes":[],"body":{"id":67118,"nodeType":"Block","src":"1615:89:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67108,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67049,"src":"1633:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":67111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1654:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67110,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1646:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67109,"name":"address","nodeType":"ElementaryTypeName","src":"1646:7:118","typeDescriptions":{}}},"id":67112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1646:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1633:23:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973206e6f74207465726d696e61746564","id":67114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1658:27:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""},"value":"program is not terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_645ea9267b04b6ac53df8eea2c448cbffac59a494197543c99a5f296932bd588","typeString":"literal_string \"program is not terminated\""}],"id":67107,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1625:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1625:61:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67116,"nodeType":"ExpressionStatement","src":"1625:61:118"},{"id":67117,"nodeType":"PlaceholderStatement","src":"1696:1:118"}]},"documentation":{"id":67105,"nodeType":"StructuredDocumentation","src":"1488:96:118","text":"@dev Functions marked with this modifier can be called only after the program is terminated."},"name":"whenTerminated","nameLocation":"1598:14:118","parameters":{"id":67106,"nodeType":"ParameterList","parameters":[],"src":"1612:2:118"},"virtual":false,"visibility":"internal"},{"id":67131,"nodeType":"ModifierDefinition","src":"1830:127:118","nodes":[],"body":{"id":67130,"nodeType":"Block","src":"1864:93:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":67125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67123,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67056,"src":"1882:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":67124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1890:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1882:9:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a6572206861736e2774206372656174656420696e6974206d65737361676520796574","id":67126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1893:45:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d3f165ecb53a71c4baab7e3c64d50628aa4b4da22aa56421c8898d77a0af21","typeString":"literal_string \"initializer hasn't created init message yet\""},"value":"initializer hasn't created init message yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_65d3f165ecb53a71c4baab7e3c64d50628aa4b4da22aa56421c8898d77a0af21","typeString":"literal_string \"initializer hasn't created init message yet\""}],"id":67122,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1874:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1874:65:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67128,"nodeType":"ExpressionStatement","src":"1874:65:118"},{"id":67129,"nodeType":"PlaceholderStatement","src":"1949:1:118"}]},"documentation":{"id":67120,"nodeType":"StructuredDocumentation","src":"1710:115:118","text":"@dev Functions marked with this modifier can be called only after the initializer has created the init message."},"name":"whenInitMessageCreated","nameLocation":"1839:22:118","parameters":{"id":67121,"nodeType":"ParameterList","parameters":[],"src":"1861:2:118"},"virtual":false,"visibility":"internal"},{"id":67148,"nodeType":"ModifierDefinition","src":"2122:237:118","nodes":[],"body":{"id":67147,"nodeType":"Block","src":"2173:186:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":67142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":67137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67135,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67056,"src":"2204:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":67136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2212:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2204:9:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":67138,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67743,"src":"2217:7:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2217:9:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":67140,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67052,"src":"2230:11:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2217:24:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2204:37:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a6572206861736e2774206372656174656420696e6974206d657373616765207965743b20616e6420736f75726365206973206e6f7420696e697469616c697a6572","id":67143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2255:76:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_30f0ecacdc4f043fe4536cec8ec5dce9f84d0c03c073a67b932c97032eee9e08","typeString":"literal_string \"initializer hasn't created init message yet; and source is not initializer\""},"value":"initializer hasn't created init message yet; and source is not initializer"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_30f0ecacdc4f043fe4536cec8ec5dce9f84d0c03c073a67b932c97032eee9e08","typeString":"literal_string \"initializer hasn't created init message yet; and source is not initializer\""}],"id":67134,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2183:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2183:158:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67145,"nodeType":"ExpressionStatement","src":"2183:158:118"},{"id":67146,"nodeType":"PlaceholderStatement","src":"2351:1:118"}]},"documentation":{"id":67132,"nodeType":"StructuredDocumentation","src":"1963:154:118","text":"@dev Functions marked with this modifier can be called only after the initializer has created the init message or from the initializer (first access)."},"name":"whenInitMessageCreatedOrFromInitializer","nameLocation":"2131:39:118","parameters":{"id":67133,"nodeType":"ParameterList","parameters":[],"src":"2170:2:118"},"virtual":false,"visibility":"internal"},{"id":67163,"nodeType":"ModifierDefinition","src":"2459:108:118","nodes":[],"body":{"id":67162,"nodeType":"Block","src":"2482:85:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67152,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67049,"src":"2500:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":67155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2521:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2513:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67153,"name":"address","nodeType":"ElementaryTypeName","src":"2513:7:118","typeDescriptions":{}}},"id":67156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2513:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2500:23:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6772616d206973207465726d696e61746564","id":67158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2525:23:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""},"value":"program is terminated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b99e931e301d9bf46f7569c6df99f13b4ced53db9be4aedb00fc4bbd41b4ec22","typeString":"literal_string \"program is terminated\""}],"id":67151,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2492:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2492:57:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67160,"nodeType":"ExpressionStatement","src":"2492:57:118"},{"id":67161,"nodeType":"PlaceholderStatement","src":"2559:1:118"}]},"documentation":{"id":67149,"nodeType":"StructuredDocumentation","src":"2365:89:118","text":"@dev Functions marked with this modifier can be called only if the program is active."},"name":"whileActive","nameLocation":"2468:11:118","parameters":{"id":67150,"nodeType":"ParameterList","parameters":[],"src":"2479:2:118"},"virtual":false,"visibility":"internal"},{"id":67178,"nodeType":"FunctionDefinition","src":"2606:108:118","nodes":[],"body":{"id":67177,"nodeType":"Block","src":"2654:60:118","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":67171,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}],"id":67170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67169,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:118","typeDescriptions":{}}},"id":67172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67168,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65223,"src":"2671:12:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$65223_$","typeString":"type(contract IMirrorProxy)"}},"id":67173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2671:27:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$65223","typeString":"contract IMirrorProxy"}},"id":67174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2699:6:118","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":65222,"src":"2671:34:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":67175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2671:36:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":67167,"id":67176,"nodeType":"Return","src":"2664:43:118"}]},"baseFunctions":[65126],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"2615:6:118","parameters":{"id":67164,"nodeType":"ParameterList","parameters":[],"src":"2621:2:118"},"returnParameters":{"id":67167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67178,"src":"2645:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67165,"name":"address","nodeType":"ElementaryTypeName","src":"2645:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2644:9:118"},"scope":67773,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":67219,"nodeType":"FunctionDefinition","src":"2750:383:118","nodes":[],"body":{"id":67218,"nodeType":"Block","src":"2959:174:118","nodes":[],"statements":[{"assignments":[67195],"declarations":[{"constant":false,"id":67195,"mutability":"mutable","name":"id","nameLocation":"2977:2:118","nodeType":"VariableDeclaration","scope":67218,"src":"2969:10:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67194,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2969:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":67207,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":67201,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3017:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}],"id":67200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3009:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67199,"name":"address","nodeType":"ElementaryTypeName","src":"3009:7:118","typeDescriptions":{}}},"id":67202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3009:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3024:7:118","subExpression":{"id":67203,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67056,"src":"3024:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":67197,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2992:3:118","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":67198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2996:12:118","memberName":"encodePacked","nodeType":"MemberAccess","src":"2992:16:118","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":67205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2992:40:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":67196,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2982:9:118","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":67206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2982:51:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2969:64:118"},{"eventCall":{"arguments":[{"id":67209,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67195,"src":"3074:2:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":67210,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67743,"src":"3078:7:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3078:9:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67212,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67180,"src":"3089:8:118","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":67213,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67182,"src":"3099:6:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67208,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65054,"src":"3049:24:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":67214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3049:57:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67215,"nodeType":"EmitStatement","src":"3044:62:118"},{"expression":{"id":67216,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67195,"src":"3124:2:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":67193,"id":67217,"nodeType":"Return","src":"3117:9:118"}]},"baseFunctions":[65140],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[{"id":67185,"kind":"modifierInvocation","modifierName":{"id":67184,"name":"whileActive","nameLocations":["2837:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":67163,"src":"2837:11:118"},"nodeType":"ModifierInvocation","src":"2837:11:118"},{"id":67187,"kind":"modifierInvocation","modifierName":{"id":67186,"name":"whenInitMessageCreatedOrFromInitializer","nameLocations":["2857:39:118"],"nodeType":"IdentifierPath","referencedDeclaration":67148,"src":"2857:39:118"},"nodeType":"ModifierInvocation","src":"2857:39:118"},{"arguments":[{"id":67189,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67182,"src":"2921:6:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":67190,"kind":"modifierInvocation","modifierName":{"id":67188,"name":"retrievingValue","nameLocations":["2905:15:118"],"nodeType":"IdentifierPath","referencedDeclaration":67104,"src":"2905:15:118"},"nodeType":"ModifierInvocation","src":"2905:23:118"}],"name":"sendMessage","nameLocation":"2759:11:118","parameters":{"id":67183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67180,"mutability":"mutable","name":"_payload","nameLocation":"2786:8:118","nodeType":"VariableDeclaration","scope":67219,"src":"2771:23:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":67179,"name":"bytes","nodeType":"ElementaryTypeName","src":"2771:5:118","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":67182,"mutability":"mutable","name":"_value","nameLocation":"2804:6:118","nodeType":"VariableDeclaration","scope":67219,"src":"2796:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":67181,"name":"uint128","nodeType":"ElementaryTypeName","src":"2796:7:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2770:41:118"},"returnParameters":{"id":67193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67192,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67219,"src":"2946:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2946:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2945:9:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":67244,"nodeType":"FunctionDefinition","src":"3139:269:118","nodes":[],"body":{"id":67243,"nodeType":"Block","src":"3323:85:118","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":67236,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67221,"src":"3361:10:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":67237,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67743,"src":"3373:7:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3373:9:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67239,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67223,"src":"3384:8:118","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":67240,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67225,"src":"3394:6:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67235,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65065,"src":"3338:22:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":67241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3338:63:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67242,"nodeType":"EmitStatement","src":"3333:68:118"}]},"baseFunctions":[65149],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[{"id":67228,"kind":"modifierInvocation","modifierName":{"id":67227,"name":"whileActive","nameLocations":["3244:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":67163,"src":"3244:11:118"},"nodeType":"ModifierInvocation","src":"3244:11:118"},{"id":67230,"kind":"modifierInvocation","modifierName":{"id":67229,"name":"whenInitMessageCreated","nameLocations":["3264:22:118"],"nodeType":"IdentifierPath","referencedDeclaration":67131,"src":"3264:22:118"},"nodeType":"ModifierInvocation","src":"3264:22:118"},{"arguments":[{"id":67232,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67225,"src":"3311:6:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":67233,"kind":"modifierInvocation","modifierName":{"id":67231,"name":"retrievingValue","nameLocations":["3295:15:118"],"nodeType":"IdentifierPath","referencedDeclaration":67104,"src":"3295:15:118"},"nodeType":"ModifierInvocation","src":"3295:23:118"}],"name":"sendReply","nameLocation":"3148:9:118","parameters":{"id":67226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67221,"mutability":"mutable","name":"_repliedTo","nameLocation":"3166:10:118","nodeType":"VariableDeclaration","scope":67244,"src":"3158:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67220,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3158:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":67223,"mutability":"mutable","name":"_payload","nameLocation":"3193:8:118","nodeType":"VariableDeclaration","scope":67244,"src":"3178:23:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":67222,"name":"bytes","nodeType":"ElementaryTypeName","src":"3178:5:118","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":67225,"mutability":"mutable","name":"_value","nameLocation":"3211:6:118","nodeType":"VariableDeclaration","scope":67244,"src":"3203:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":67224,"name":"uint128","nodeType":"ElementaryTypeName","src":"3203:7:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3157:61:118"},"returnParameters":{"id":67234,"nodeType":"ParameterList","parameters":[],"src":"3323:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":67258,"nodeType":"FunctionDefinition","src":"3414:139:118","nodes":[],"body":{"id":67257,"nodeType":"Block","src":"3486:67:118","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":67252,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67246,"src":"3524:10:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":67253,"name":"_source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67743,"src":"3536:7:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3536:9:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":67251,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65072,"src":"3501:22:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":67255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3501:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67256,"nodeType":"EmitStatement","src":"3496:50:118"}]},"baseFunctions":[65154],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[{"id":67249,"kind":"modifierInvocation","modifierName":{"id":67248,"name":"whenInitMessageCreated","nameLocations":["3463:22:118"],"nodeType":"IdentifierPath","referencedDeclaration":67131,"src":"3463:22:118"},"nodeType":"ModifierInvocation","src":"3463:22:118"}],"name":"claimValue","nameLocation":"3423:10:118","parameters":{"id":67247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67246,"mutability":"mutable","name":"_claimedId","nameLocation":"3442:10:118","nodeType":"VariableDeclaration","scope":67258,"src":"3434:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3434:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3433:20:118"},"returnParameters":{"id":67250,"nodeType":"ParameterList","parameters":[],"src":"3486:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":67273,"nodeType":"FunctionDefinition","src":"3559:154:118","nodes":[],"body":{"id":67272,"nodeType":"Block","src":"3652:61:118","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":67269,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67260,"src":"3699:6:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67268,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65077,"src":"3667:31:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":67270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3667:39:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67271,"nodeType":"EmitStatement","src":"3662:44:118"}]},"baseFunctions":[65159],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[{"id":67263,"kind":"modifierInvocation","modifierName":{"id":67262,"name":"whileActive","nameLocations":["3616:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":67163,"src":"3616:11:118"},"nodeType":"ModifierInvocation","src":"3616:11:118"},{"arguments":[{"id":67265,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67260,"src":"3644:6:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":67266,"kind":"modifierInvocation","modifierName":{"id":67264,"name":"retrievingValue","nameLocations":["3628:15:118"],"nodeType":"IdentifierPath","referencedDeclaration":67104,"src":"3628:15:118"},"nodeType":"ModifierInvocation","src":"3628:23:118"}],"name":"executableBalanceTopUp","nameLocation":"3568:22:118","parameters":{"id":67261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67260,"mutability":"mutable","name":"_value","nameLocation":"3599:6:118","nodeType":"VariableDeclaration","scope":67273,"src":"3591:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":67259,"name":"uint128","nodeType":"ElementaryTypeName","src":"3591:7:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3590:16:118"},"returnParameters":{"id":67267,"nodeType":"ParameterList","parameters":[],"src":"3652:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":67300,"nodeType":"FunctionDefinition","src":"3719:193:118","nodes":[],"body":{"id":67299,"nodeType":"Block","src":"3783:129:118","nodes":[],"statements":[{"assignments":[67279],"declarations":[{"constant":false,"id":67279,"mutability":"mutable","name":"balance","nameLocation":"3801:7:118","nodeType":"VariableDeclaration","scope":67299,"src":"3793:15:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":67278,"name":"uint256","nodeType":"ElementaryTypeName","src":"3793:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":67290,"initialValue":{"arguments":[{"arguments":[{"id":67287,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3846:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}],"id":67286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3838:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67285,"name":"address","nodeType":"ElementaryTypeName","src":"3838:7:118","typeDescriptions":{}}},"id":67288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3838:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":67281,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67178,"src":"3818:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3818:8:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67280,"name":"_wvara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67724,"src":"3811:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_contract$_IWrappedVara_$65497_$","typeString":"function (address) view returns (contract IWrappedVara)"}},"id":67283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3811:16:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$65497","typeString":"contract IWrappedVara"}},"id":67284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3828:9:118","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43770,"src":"3811:26:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":67289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3811:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3793:59:118"},{"expression":{"arguments":[{"id":67292,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67049,"src":"3877:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":67295,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67279,"src":"3896:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":67294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3888:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":67293,"name":"uint128","nodeType":"ElementaryTypeName","src":"3888:7:118","typeDescriptions":{}}},"id":67296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3888:16:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67291,"name":"_transferValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67772,"src":"3862:14:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":67297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3862:43:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67298,"nodeType":"ExpressionStatement","src":"3862:43:118"}]},"baseFunctions":[65162],"functionSelector":"e43f3433","implemented":true,"kind":"function","modifiers":[{"id":67276,"kind":"modifierInvocation","modifierName":{"id":67275,"name":"whenTerminated","nameLocations":["3768:14:118"],"nodeType":"IdentifierPath","referencedDeclaration":67119,"src":"3768:14:118"},"nodeType":"ModifierInvocation","src":"3768:14:118"}],"name":"transferLockedValueToInheritor","nameLocation":"3728:30:118","parameters":{"id":67274,"nodeType":"ParameterList","parameters":[],"src":"3758:2:118"},"returnParameters":{"id":67277,"nodeType":"ParameterList","parameters":[],"src":"3783:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":67338,"nodeType":"FunctionDefinition","src":"3970:310:118","nodes":[],"body":{"id":67337,"nodeType":"Block","src":"4048:232:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67310,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67052,"src":"4066:11:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":67313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4089:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4081:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67311,"name":"address","nodeType":"ElementaryTypeName","src":"4081:7:118","typeDescriptions":{}}},"id":67314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4081:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4066:25:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e6365","id":67316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4093:36:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""},"value":"initializer could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""}],"id":67309,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4058:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4058:72:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67318,"nodeType":"ExpressionStatement","src":"4058:72:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67320,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67047,"src":"4148:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":67323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4167:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67322,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4159:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67321,"name":"address","nodeType":"ElementaryTypeName","src":"4159:7:118","typeDescriptions":{}}},"id":67324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4159:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4148:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c697a657220636f756c64206f6e6c7920626520736574206f6e6365","id":67326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4171:36:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""},"value":"initializer could only be set once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a22a998b3a781946b89501fcd4ccd018d3a95bd8711aff0547431faa4986b249","typeString":"literal_string \"initializer could only be set once\""}],"id":67319,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4140:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4140:68:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67328,"nodeType":"ExpressionStatement","src":"4140:68:118"},{"expression":{"id":67331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":67329,"name":"initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67052,"src":"4219:11:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":67330,"name":"_initializer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67302,"src":"4233:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4219:26:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":67332,"nodeType":"ExpressionStatement","src":"4219:26:118"},{"expression":{"id":67335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":67333,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67047,"src":"4255:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":67334,"name":"_decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67304,"src":"4265:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4255:18:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":67336,"nodeType":"ExpressionStatement","src":"4255:18:118"}]},"baseFunctions":[65169],"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":67307,"kind":"modifierInvocation","modifierName":{"id":67306,"name":"onlyRouter","nameLocations":["4037:10:118"],"nodeType":"IdentifierPath","referencedDeclaration":67070,"src":"4037:10:118"},"nodeType":"ModifierInvocation","src":"4037:10:118"}],"name":"initialize","nameLocation":"3979:10:118","parameters":{"id":67305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67302,"mutability":"mutable","name":"_initializer","nameLocation":"3998:12:118","nodeType":"VariableDeclaration","scope":67338,"src":"3990:20:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67301,"name":"address","nodeType":"ElementaryTypeName","src":"3990:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67304,"mutability":"mutable","name":"_decoder","nameLocation":"4020:8:118","nodeType":"VariableDeclaration","scope":67338,"src":"4012:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67303,"name":"address","nodeType":"ElementaryTypeName","src":"4012:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3989:40:118"},"returnParameters":{"id":67308,"nodeType":"ParameterList","parameters":[],"src":"4048:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":67415,"nodeType":"FunctionDefinition","src":"4363:1163:118","nodes":[],"body":{"id":67414,"nodeType":"Block","src":"4476:1050:118","nodes":[],"statements":[{"documentation":"@dev Verify that the transition belongs to this contract.","expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":67349,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"4564:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4576:7:118","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":69590,"src":"4564:19:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":67353,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4595:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$67773","typeString":"contract Mirror"}],"id":67352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4587:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67351,"name":"address","nodeType":"ElementaryTypeName","src":"4587:7:118","typeDescriptions":{}}},"id":67354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4587:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4564:36:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6163746f724964206d757374206265207468697320636f6e7472616374","id":67356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4602:31:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_ba7be785920a68bd302e7ea09bd7071e8b885ef81058f7ff907b22051b8150cd","typeString":"literal_string \"actorId must be this contract\""},"value":"actorId must be this contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ba7be785920a68bd302e7ea09bd7071e8b885ef81058f7ff907b22051b8150cd","typeString":"literal_string \"actorId must be this contract\""}],"id":67348,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4556:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4556:78:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67358,"nodeType":"ExpressionStatement","src":"4556:78:118"},{"assignments":[67361],"declarations":[{"constant":false,"id":67361,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"4698:18:118","nodeType":"VariableDeclaration","scope":67414,"src":"4690:26:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67360,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4690:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"documentation":"@dev Send all outgoing messages.","id":67366,"initialValue":{"arguments":[{"expression":{"id":67363,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"4733:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4745:8:118","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":69604,"src":"4733:20:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$69569_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_Message_$69569_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}],"id":67362,"name":"_sendMessages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67482,"src":"4719:13:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_Message_$69569_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message calldata[] calldata) returns (bytes32)"}},"id":67365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4719:35:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4690:64:118"},{"assignments":[67369],"declarations":[{"constant":false,"id":67369,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"4817:15:118","nodeType":"VariableDeclaration","scope":67414,"src":"4809:23:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67368,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4809:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"documentation":"@dev Send value for each claim.","id":67374,"initialValue":{"arguments":[{"expression":{"id":67371,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"4848:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4860:11:118","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":69600,"src":"4848:23:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$69626_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$69626_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}],"id":67370,"name":"_claimValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67674,"src":"4835:12:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_ValueClaim_$69626_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.ValueClaim calldata[] calldata) returns (bytes32)"}},"id":67373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4835:37:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4809:63:118"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":67375,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"4932:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4944:9:118","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":69594,"src":"4932:21:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":67379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4965:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4957:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67377,"name":"address","nodeType":"ElementaryTypeName","src":"4957:7:118","typeDescriptions":{}}},"id":67380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4957:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4932:35:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Set inheritor if specified.","id":67388,"nodeType":"IfStatement","src":"4928:102:118","trueBody":{"id":67387,"nodeType":"Block","src":"4969:61:118","statements":[{"expression":{"arguments":[{"expression":{"id":67383,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"4997:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5009:9:118","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":69594,"src":"4997:21:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67382,"name":"_setInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67689,"src":"4983:13:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":67385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4983:36:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67386,"nodeType":"ExpressionStatement","src":"4983:36:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":67392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67389,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67054,"src":"5095:9:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":67390,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"5108:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5120:12:118","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":69592,"src":"5108:24:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5095:37:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":"@dev Update the state hash if changed.","id":67399,"nodeType":"IfStatement","src":"5091:110:118","trueBody":{"id":67398,"nodeType":"Block","src":"5134:67:118","statements":[{"expression":{"arguments":[{"expression":{"id":67394,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"5165:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5177:12:118","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":69592,"src":"5165:24:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":67393,"name":"_updateStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67703,"src":"5148:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":67396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5148:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67397,"nodeType":"ExpressionStatement","src":"5148:42:118"}]}},{"documentation":"@dev Return hash of performed state transition.","expression":{"arguments":[{"expression":{"id":67402,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"5316:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5328:7:118","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":69590,"src":"5316:19:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":67404,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"5349:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5361:12:118","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":69592,"src":"5349:24:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":67406,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"5387:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5399:9:118","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":69594,"src":"5387:21:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":67408,"name":"_transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67341,"src":"5422:11:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":67409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5434:14:118","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":69596,"src":"5422:26:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":67410,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67369,"src":"5462:15:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":67411,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67361,"src":"5491:18:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":67400,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"5278:4:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5283:19:118","memberName":"stateTransitionHash","nodeType":"MemberAccess","referencedDeclaration":69830,"src":"5278:24:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,address,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":67412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5278:241:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":67347,"id":67413,"nodeType":"Return","src":"5271:248:118"}]},"baseFunctions":[65177],"functionSelector":"9ed32350","implemented":true,"kind":"function","modifiers":[{"id":67344,"kind":"modifierInvocation","modifierName":{"id":67343,"name":"onlyRouter","nameLocations":["4447:10:118"],"nodeType":"IdentifierPath","referencedDeclaration":67070,"src":"4447:10:118"},"nodeType":"ModifierInvocation","src":"4447:10:118"}],"name":"performStateTransition","nameLocation":"4372:22:118","parameters":{"id":67342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67341,"mutability":"mutable","name":"_transition","nameLocation":"4425:11:118","nodeType":"VariableDeclaration","scope":67415,"src":"4395:41:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":67340,"nodeType":"UserDefinedTypeName","pathNode":{"id":67339,"name":"Gear.StateTransition","nameLocations":["4395:4:118","4400:15:118"],"nodeType":"IdentifierPath","referencedDeclaration":69605,"src":"4395:20:118"},"referencedDeclaration":69605,"src":"4395:20:118","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"src":"4394:43:118"},"returnParameters":{"id":67347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67415,"src":"4467:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4467:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4466:9:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":67482,"nodeType":"FunctionDefinition","src":"5734:627:118","nodes":[],"body":{"id":67481,"nodeType":"Block","src":"5818:543:118","nodes":[],"statements":[{"assignments":[67425],"declarations":[{"constant":false,"id":67425,"mutability":"mutable","name":"messagesHashes","nameLocation":"5841:14:118","nodeType":"VariableDeclaration","scope":67481,"src":"5828:27:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":67424,"name":"bytes","nodeType":"ElementaryTypeName","src":"5828:5:118","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":67426,"nodeType":"VariableDeclarationStatement","src":"5828:27:118"},{"body":{"id":67475,"nodeType":"Block","src":"5913:399:118","statements":[{"assignments":[67442],"declarations":[{"constant":false,"id":67442,"mutability":"mutable","name":"message","nameLocation":"5949:7:118","nodeType":"VariableDeclaration","scope":67475,"src":"5927:29:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":67441,"nodeType":"UserDefinedTypeName","pathNode":{"id":67440,"name":"Gear.Message","nameLocations":["5927:4:118","5932:7:118"],"nodeType":"IdentifierPath","referencedDeclaration":69569,"src":"5927:12:118"},"referencedDeclaration":69569,"src":"5927:12:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"id":67446,"initialValue":{"baseExpression":{"id":67443,"name":"_messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67419,"src":"5959:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$69569_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":67445,"indexExpression":{"id":67444,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67428,"src":"5969:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5959:12:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"nodeType":"VariableDeclarationStatement","src":"5927:44:118"},{"expression":{"id":67457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":67447,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67425,"src":"5986:14:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":67451,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67425,"src":"6016:14:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":67454,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67442,"src":"6049:7:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}],"expression":{"id":67452,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"6032:4:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6037:11:118","memberName":"messageHash","nodeType":"MemberAccess","referencedDeclaration":69776,"src":"6032:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$69569_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message memory) pure returns (bytes32)"}},"id":67455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6032:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":67449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6003:5:118","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":67448,"name":"bytes","nodeType":"ElementaryTypeName","src":"6003:5:118","typeDescriptions":{}}},"id":67450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6009:6:118","memberName":"concat","nodeType":"MemberAccess","src":"6003:12:118","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":67456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6003:55:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"5986:72:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":67458,"nodeType":"ExpressionStatement","src":"5986:72:118"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":67463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":67459,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67442,"src":"6144:7:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6152:12:118","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":69568,"src":"6144:20:118","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$69588_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":67461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6165:2:118","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":69585,"src":"6144:23:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":67462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6171:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6144:28:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":67473,"nodeType":"Block","src":"6243:59:118","statements":[{"expression":{"arguments":[{"id":67470,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67442,"src":"6279:7:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":67469,"name":"_sendReplyMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67609,"src":"6261:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$69569_calldata_ptr_$returns$__$","typeString":"function (struct Gear.Message calldata)"}},"id":67471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6261:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67472,"nodeType":"ExpressionStatement","src":"6261:26:118"}]},"id":67474,"nodeType":"IfStatement","src":"6140:162:118","trueBody":{"id":67468,"nodeType":"Block","src":"6174:63:118","statements":[{"expression":{"arguments":[{"id":67465,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67442,"src":"6214:7:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}],"id":67464,"name":"_sendMailboxedMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67539,"src":"6192:21:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$69569_calldata_ptr_$returns$__$","typeString":"function (struct Gear.Message calldata)"}},"id":67466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6192:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67467,"nodeType":"ExpressionStatement","src":"6192:30:118"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":67434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67431,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67428,"src":"5886:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":67432,"name":"_messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67419,"src":"5890:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$69569_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":67433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5900:6:118","memberName":"length","nodeType":"MemberAccess","src":"5890:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5886:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67476,"initializationExpression":{"assignments":[67428],"declarations":[{"constant":false,"id":67428,"mutability":"mutable","name":"i","nameLocation":"5879:1:118","nodeType":"VariableDeclaration","scope":67476,"src":"5871:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":67427,"name":"uint256","nodeType":"ElementaryTypeName","src":"5871:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":67430,"initialValue":{"hexValue":"30","id":67429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5883:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5871:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":67436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5908:3:118","subExpression":{"id":67435,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67428,"src":"5908:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":67437,"nodeType":"ExpressionStatement","src":"5908:3:118"},"nodeType":"ForStatement","src":"5866:446:118"},{"expression":{"arguments":[{"id":67478,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67425,"src":"6339:14:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":67477,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6329:9:118","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":67479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":67423,"id":67480,"nodeType":"Return","src":"6322:32:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessages","nameLocation":"5743:13:118","parameters":{"id":67420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67419,"mutability":"mutable","name":"_messages","nameLocation":"5781:9:118","nodeType":"VariableDeclaration","scope":67482,"src":"5757:33:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$69569_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message[]"},"typeName":{"baseType":{"id":67417,"nodeType":"UserDefinedTypeName","pathNode":{"id":67416,"name":"Gear.Message","nameLocations":["5757:4:118","5762:7:118"],"nodeType":"IdentifierPath","referencedDeclaration":69569,"src":"5757:12:118"},"referencedDeclaration":69569,"src":"5757:12:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_storage_ptr","typeString":"struct Gear.Message"}},"id":67418,"nodeType":"ArrayTypeName","src":"5757:14:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$69569_storage_$dyn_storage_ptr","typeString":"struct Gear.Message[]"}},"visibility":"internal"}],"src":"5756:35:118"},"returnParameters":{"id":67423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67422,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67482,"src":"5809:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67421,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5809:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5808:9:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":67539,"nodeType":"FunctionDefinition","src":"6420:653:118","nodes":[],"body":{"id":67538,"nodeType":"Block","src":"6491:582:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67489,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67047,"src":"6505:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":67492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6524:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6516:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67490,"name":"address","nodeType":"ElementaryTypeName","src":"6516:7:118","typeDescriptions":{}}},"id":67493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6516:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6505:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67526,"nodeType":"IfStatement","src":"6501:474:118","trueBody":{"id":67525,"nodeType":"Block","src":"6528:447:118","statements":[{"assignments":[67496],"declarations":[{"constant":false,"id":67496,"mutability":"mutable","name":"callData","nameLocation":"6555:8:118","nodeType":"VariableDeclaration","scope":67525,"src":"6542:21:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":67495,"name":"bytes","nodeType":"ElementaryTypeName","src":"6542:5:118","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":67511,"initialValue":{"arguments":[{"expression":{"expression":{"id":67499,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65215,"src":"6606:14:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$65215_$","typeString":"type(contract IMirrorDecoder)"}},"id":67500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6621:13:118","memberName":"onMessageSent","nodeType":"MemberAccess","referencedDeclaration":65201,"src":"6606:28:118","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes32_$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$returns$__$","typeString":"function IMirrorDecoder.onMessageSent(bytes32,address,bytes calldata,uint128)"}},"id":67501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6635:8:118","memberName":"selector","nodeType":"MemberAccess","src":"6606:37:118","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"expression":{"id":67502,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"6661:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6670:2:118","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":69559,"src":"6661:11:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":67504,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"6690:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6699:11:118","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":69561,"src":"6690:20:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":67506,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"6728:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6737:7:118","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":69563,"src":"6728:16:118","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":67508,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"6762:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6771:5:118","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":69565,"src":"6762:14:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":67497,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6566:3:118","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":67498,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6570:18:118","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"6566:22:118","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":67510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6566:224:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6542:248:118"},{"assignments":[67513,null],"declarations":[{"constant":false,"id":67513,"mutability":"mutable","name":"success","nameLocation":"6850:7:118","nodeType":"VariableDeclaration","scope":67525,"src":"6845:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":67512,"name":"bool","nodeType":"ElementaryTypeName","src":"6845:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":67520,"initialValue":{"arguments":[{"id":67518,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67496,"src":"6889:8:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":67514,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67047,"src":"6862:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":67515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6870:4:118","memberName":"call","nodeType":"MemberAccess","src":"6862:12:118","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":67517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":67516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6880:7:118","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"6862:26:118","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":67519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6862:36:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6844:54:118"},{"condition":{"id":67521,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67513,"src":"6917:7:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67524,"nodeType":"IfStatement","src":"6913:52:118","trueBody":{"id":67523,"nodeType":"Block","src":"6926:39:118","statements":[{"functionReturnParameters":67488,"id":67522,"nodeType":"Return","src":"6944:7:118"}]}}]}},{"eventCall":{"arguments":[{"expression":{"id":67528,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"6998:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7007:2:118","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":69559,"src":"6998:11:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":67530,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"7011:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7020:11:118","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":69561,"src":"7011:20:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":67532,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"7033:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7042:7:118","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":69563,"src":"7033:16:118","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":67534,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67486,"src":"7051:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7060:5:118","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":69565,"src":"7051:14:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67527,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65088,"src":"6990:7:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":67536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6990:76:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67537,"nodeType":"EmitStatement","src":"6985:81:118"}]},"documentation":{"id":67483,"nodeType":"StructuredDocumentation","src":"6367:48:118","text":"@dev Value never sent since goes to mailbox."},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMailboxedMessage","nameLocation":"6429:21:118","parameters":{"id":67487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67486,"mutability":"mutable","name":"_message","nameLocation":"6473:8:118","nodeType":"VariableDeclaration","scope":67539,"src":"6451:30:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":67485,"nodeType":"UserDefinedTypeName","pathNode":{"id":67484,"name":"Gear.Message","nameLocations":["6451:4:118","6456:7:118"],"nodeType":"IdentifierPath","referencedDeclaration":69569,"src":"6451:12:118"},"referencedDeclaration":69569,"src":"6451:12:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"6450:32:118"},"returnParameters":{"id":67488,"nodeType":"ParameterList","parameters":[],"src":"6491:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":67609,"nodeType":"FunctionDefinition","src":"7148:784:118","nodes":[],"body":{"id":67608,"nodeType":"Block","src":"7215:717:118","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":67547,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7240:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7249:11:118","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":69561,"src":"7240:20:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":67549,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7262:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7271:5:118","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":69565,"src":"7262:14:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67546,"name":"_transferValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67772,"src":"7225:14:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":67551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7225:52:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67552,"nodeType":"ExpressionStatement","src":"7225:52:118"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67553,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67047,"src":"7292:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":67556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7311:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7303:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":67554,"name":"address","nodeType":"ElementaryTypeName","src":"7303:7:118","typeDescriptions":{}}},"id":67557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7303:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7292:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67594,"nodeType":"IfStatement","src":"7288:529:118","trueBody":{"id":67593,"nodeType":"Block","src":"7315:502:118","statements":[{"assignments":[67560],"declarations":[{"constant":false,"id":67560,"mutability":"mutable","name":"callData","nameLocation":"7342:8:118","nodeType":"VariableDeclaration","scope":67593,"src":"7329:21:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":67559,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:118","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":67579,"initialValue":{"arguments":[{"expression":{"expression":{"id":67563,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65215,"src":"7393:14:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$65215_$","typeString":"type(contract IMirrorDecoder)"}},"id":67564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7408:11:118","memberName":"onReplySent","nodeType":"MemberAccess","referencedDeclaration":65214,"src":"7393:26:118","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_bytes_calldata_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function IMirrorDecoder.onReplySent(address,bytes calldata,uint128,bytes32,bytes4)"}},"id":67565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7420:8:118","memberName":"selector","nodeType":"MemberAccess","src":"7393:35:118","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"expression":{"id":67566,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7446:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7455:11:118","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":69561,"src":"7446:20:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":67568,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7484:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7493:7:118","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":69563,"src":"7484:16:118","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":67570,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7518:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7527:5:118","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":69565,"src":"7518:14:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":67572,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7550:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7559:12:118","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":69568,"src":"7550:21:118","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$69588_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":67574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7572:2:118","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":69585,"src":"7550:24:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":67575,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7592:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7601:12:118","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":69568,"src":"7592:21:118","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$69588_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":67577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7614:4:118","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":69587,"src":"7592:26:118","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":67561,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7353:3:118","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":67562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7357:18:118","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"7353:22:118","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":67578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7353:279:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"7329:303:118"},{"assignments":[67581,null],"declarations":[{"constant":false,"id":67581,"mutability":"mutable","name":"success","nameLocation":"7692:7:118","nodeType":"VariableDeclaration","scope":67593,"src":"7687:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":67580,"name":"bool","nodeType":"ElementaryTypeName","src":"7687:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":67588,"initialValue":{"arguments":[{"id":67586,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67560,"src":"7731:8:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":67582,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67047,"src":"7704:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":67583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7712:4:118","memberName":"call","nodeType":"MemberAccess","src":"7704:12:118","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":67585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["gas"],"nodeType":"FunctionCallOptions","options":[{"hexValue":"3530305f303030","id":67584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7722:7:118","typeDescriptions":{"typeIdentifier":"t_rational_500000_by_1","typeString":"int_const 500000"},"value":"500_000"}],"src":"7704:26:118","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":67587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7704:36:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7686:54:118"},{"condition":{"id":67589,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67581,"src":"7759:7:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67592,"nodeType":"IfStatement","src":"7755:52:118","trueBody":{"id":67591,"nodeType":"Block","src":"7768:39:118","statements":[{"functionReturnParameters":67545,"id":67590,"nodeType":"Return","src":"7786:7:118"}]}}]}},{"eventCall":{"arguments":[{"expression":{"id":67596,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7838:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7847:7:118","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":69563,"src":"7838:16:118","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":67598,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7856:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7865:5:118","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":69565,"src":"7856:14:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":67600,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7872:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7881:12:118","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":69568,"src":"7872:21:118","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$69588_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":67602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7894:2:118","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":69585,"src":"7872:24:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":67603,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67543,"src":"7898:8:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":67604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7907:12:118","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":69568,"src":"7898:21:118","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$69588_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":67605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7920:4:118","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":69587,"src":"7898:26:118","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":67595,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65099,"src":"7832:5:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":67606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7832:93:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67607,"nodeType":"EmitStatement","src":"7827:98:118"}]},"documentation":{"id":67540,"nodeType":"StructuredDocumentation","src":"7079:64:118","text":"@dev Non-zero value always sent since never goes to mailbox."},"implemented":true,"kind":"function","modifiers":[],"name":"_sendReplyMessage","nameLocation":"7157:17:118","parameters":{"id":67544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67543,"mutability":"mutable","name":"_message","nameLocation":"7197:8:118","nodeType":"VariableDeclaration","scope":67609,"src":"7175:30:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":67542,"nodeType":"UserDefinedTypeName","pathNode":{"id":67541,"name":"Gear.Message","nameLocations":["7175:4:118","7180:7:118"],"nodeType":"IdentifierPath","referencedDeclaration":69569,"src":"7175:12:118"},"referencedDeclaration":69569,"src":"7175:12:118","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$69569_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"src":"7174:32:118"},"returnParameters":{"id":67545,"nodeType":"ParameterList","parameters":[],"src":"7215:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":67674,"nodeType":"FunctionDefinition","src":"7938:514:118","nodes":[],"body":{"id":67673,"nodeType":"Block","src":"8022:430:118","nodes":[],"statements":[{"assignments":[67619],"declarations":[{"constant":false,"id":67619,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"8045:16:118","nodeType":"VariableDeclaration","scope":67673,"src":"8032:29:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":67618,"name":"bytes","nodeType":"ElementaryTypeName","src":"8032:5:118","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":67620,"nodeType":"VariableDeclarationStatement","src":"8032:29:118"},{"body":{"id":67667,"nodeType":"Block","src":"8117:284:118","statements":[{"assignments":[67636],"declarations":[{"constant":false,"id":67636,"mutability":"mutable","name":"claim","nameLocation":"8156:5:118","nodeType":"VariableDeclaration","scope":67667,"src":"8131:30:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim"},"typeName":{"id":67635,"nodeType":"UserDefinedTypeName","pathNode":{"id":67634,"name":"Gear.ValueClaim","nameLocations":["8131:4:118","8136:10:118"],"nodeType":"IdentifierPath","referencedDeclaration":69626,"src":"8131:15:118"},"referencedDeclaration":69626,"src":"8131:15:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_storage_ptr","typeString":"struct Gear.ValueClaim"}},"visibility":"internal"}],"id":67640,"initialValue":{"baseExpression":{"id":67637,"name":"_claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67613,"src":"8164:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$69626_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":67639,"indexExpression":{"id":67638,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67622,"src":"8172:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8164:10:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"8131:43:118"},{"expression":{"id":67651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":67641,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67619,"src":"8189:16:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":67645,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67619,"src":"8221:16:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":67648,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67636,"src":"8260:5:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}],"expression":{"id":67646,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"8239:4:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8244:15:118","memberName":"valueClaimBytes","nodeType":"MemberAccess","referencedDeclaration":70079,"src":"8239:20:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValueClaim_$69626_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct Gear.ValueClaim memory) pure returns (bytes memory)"}},"id":67649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8239:27:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":67643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8208:5:118","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":67642,"name":"bytes","nodeType":"ElementaryTypeName","src":"8208:5:118","typeDescriptions":{}}},"id":67644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8214:6:118","memberName":"concat","nodeType":"MemberAccess","src":"8208:12:118","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":67650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8208:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8189:78:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":67652,"nodeType":"ExpressionStatement","src":"8189:78:118"},{"expression":{"arguments":[{"expression":{"id":67654,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67636,"src":"8297:5:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":67655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8303:11:118","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":69623,"src":"8297:17:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":67656,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67636,"src":"8316:5:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":67657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8322:5:118","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":69625,"src":"8316:11:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67653,"name":"_transferValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67772,"src":"8282:14:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":67658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8282:46:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67659,"nodeType":"ExpressionStatement","src":"8282:46:118"},{"eventCall":{"arguments":[{"expression":{"id":67661,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67636,"src":"8361:5:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":67662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8367:9:118","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":69621,"src":"8361:15:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":67663,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67636,"src":"8378:5:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":67664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8384:5:118","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":69625,"src":"8378:11:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":67660,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65106,"src":"8348:12:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":67665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8348:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67666,"nodeType":"EmitStatement","src":"8343:47:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":67628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67625,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67622,"src":"8092:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":67626,"name":"_claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67613,"src":"8096:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$69626_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":67627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8104:6:118","memberName":"length","nodeType":"MemberAccess","src":"8096:14:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8092:18:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67668,"initializationExpression":{"assignments":[67622],"declarations":[{"constant":false,"id":67622,"mutability":"mutable","name":"i","nameLocation":"8085:1:118","nodeType":"VariableDeclaration","scope":67668,"src":"8077:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":67621,"name":"uint256","nodeType":"ElementaryTypeName","src":"8077:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":67624,"initialValue":{"hexValue":"30","id":67623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8089:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8077:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":67630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8112:3:118","subExpression":{"id":67629,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67622,"src":"8112:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":67631,"nodeType":"ExpressionStatement","src":"8112:3:118"},"nodeType":"ForStatement","src":"8072:329:118"},{"expression":{"arguments":[{"id":67670,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67619,"src":"8428:16:118","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":67669,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8418:9:118","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":67671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8418:27:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":67617,"id":67672,"nodeType":"Return","src":"8411:34:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_claimValues","nameLocation":"7947:12:118","parameters":{"id":67614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67613,"mutability":"mutable","name":"_claims","nameLocation":"7987:7:118","nodeType":"VariableDeclaration","scope":67674,"src":"7960:34:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$69626_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim[]"},"typeName":{"baseType":{"id":67611,"nodeType":"UserDefinedTypeName","pathNode":{"id":67610,"name":"Gear.ValueClaim","nameLocations":["7960:4:118","7965:10:118"],"nodeType":"IdentifierPath","referencedDeclaration":69626,"src":"7960:15:118"},"referencedDeclaration":69626,"src":"7960:15:118","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$69626_storage_ptr","typeString":"struct Gear.ValueClaim"}},"id":67612,"nodeType":"ArrayTypeName","src":"7960:17:118","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$69626_storage_$dyn_storage_ptr","typeString":"struct Gear.ValueClaim[]"}},"visibility":"internal"}],"src":"7959:36:118"},"returnParameters":{"id":67617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67616,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67674,"src":"8013:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67615,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8013:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8012:9:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":67689,"nodeType":"FunctionDefinition","src":"8524:243:118","nodes":[],"body":{"id":67688,"nodeType":"Block","src":"8587:180:118","nodes":[],"statements":[{"documentation":"@dev Set inheritor.","expression":{"id":67683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":67681,"name":"inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67049,"src":"8629:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":67682,"name":"_inheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67676,"src":"8641:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8629:22:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":67684,"nodeType":"ExpressionStatement","src":"8629:22:118"},{"documentation":"@dev Transfer all available balance to the inheritor.","expression":{"arguments":[],"expression":{"argumentTypes":[],"id":67685,"name":"transferLockedValueToInheritor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67300,"src":"8728:30:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":67686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8728:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67687,"nodeType":"ExpressionStatement","src":"8728:32:118"}]},"implemented":true,"kind":"function","modifiers":[{"id":67679,"kind":"modifierInvocation","modifierName":{"id":67678,"name":"whileActive","nameLocations":["8575:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":67163,"src":"8575:11:118"},"nodeType":"ModifierInvocation","src":"8575:11:118"}],"name":"_setInheritor","nameLocation":"8533:13:118","parameters":{"id":67677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67676,"mutability":"mutable","name":"_inheritor","nameLocation":"8555:10:118","nodeType":"VariableDeclaration","scope":67689,"src":"8547:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67675,"name":"address","nodeType":"ElementaryTypeName","src":"8547:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8546:20:118"},"returnParameters":{"id":67680,"nodeType":"ParameterList","parameters":[],"src":"8587:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":67703,"nodeType":"FunctionDefinition","src":"8773:235:118","nodes":[],"body":{"id":67702,"nodeType":"Block","src":"8827:181:118","nodes":[],"statements":[{"documentation":"@dev Set state hash.","expression":{"id":67696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":67694,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67054,"src":"8870:9:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":67695,"name":"_stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67691,"src":"8882:10:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8870:22:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":67697,"nodeType":"ExpressionStatement","src":"8870:22:118"},{"documentation":"@dev Emits an event signaling that the state has changed.","eventCall":{"arguments":[{"id":67699,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67054,"src":"8991:9:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":67698,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65043,"src":"8978:12:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":67700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8978:23:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67701,"nodeType":"EmitStatement","src":"8973:28:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_updateStateHash","nameLocation":"8782:16:118","parameters":{"id":67692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67691,"mutability":"mutable","name":"_stateHash","nameLocation":"8807:10:118","nodeType":"VariableDeclaration","scope":67703,"src":"8799:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67690,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8799:7:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8798:20:118"},"returnParameters":{"id":67693,"nodeType":"ParameterList","parameters":[],"src":"8827:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":67724,"nodeType":"FunctionDefinition","src":"9048:182:118","nodes":[],"body":{"id":67723,"nodeType":"Block","src":"9120:110:118","nodes":[],"statements":[{"assignments":[67712],"declarations":[{"constant":false,"id":67712,"mutability":"mutable","name":"wvaraAddr","nameLocation":"9138:9:118","nodeType":"VariableDeclaration","scope":67723,"src":"9130:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67711,"name":"address","nodeType":"ElementaryTypeName","src":"9130:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":67718,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":67714,"name":"routerAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67705,"src":"9158:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67713,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65486,"src":"9150:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$65486_$","typeString":"type(contract IRouter)"}},"id":67715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9150:19:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$65486","typeString":"contract IRouter"}},"id":67716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9170:11:118","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":65329,"src":"9150:31:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":67717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9150:33:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9130:53:118"},{"expression":{"arguments":[{"id":67720,"name":"wvaraAddr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67712,"src":"9213:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67719,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65497,"src":"9200:12:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$65497_$","typeString":"type(contract IWrappedVara)"}},"id":67721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9200:23:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$65497","typeString":"contract IWrappedVara"}},"functionReturnParameters":67710,"id":67722,"nodeType":"Return","src":"9193:30:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_wvara","nameLocation":"9057:6:118","parameters":{"id":67706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67705,"mutability":"mutable","name":"routerAddr","nameLocation":"9072:10:118","nodeType":"VariableDeclaration","scope":67724,"src":"9064:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67704,"name":"address","nodeType":"ElementaryTypeName","src":"9064:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9063:20:118"},"returnParameters":{"id":67710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67724,"src":"9106:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$65497","typeString":"contract IWrappedVara"},"typeName":{"id":67708,"nodeType":"UserDefinedTypeName","pathNode":{"id":67707,"name":"IWrappedVara","nameLocations":["9106:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":65497,"src":"9106:12:118"},"referencedDeclaration":65497,"src":"9106:12:118","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$65497","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"src":"9105:14:118"},"scope":67773,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":67743,"nodeType":"FunctionDefinition","src":"9236:182:118","nodes":[],"body":{"id":67742,"nodeType":"Block","src":"9286:132:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":67732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":67729,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9300:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":67730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9304:6:118","memberName":"sender","nodeType":"MemberAccess","src":"9300:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":67731,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67047,"src":"9314:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9300:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":67740,"nodeType":"Block","src":"9370:42:118","statements":[{"expression":{"expression":{"id":67737,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9391:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":67738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9395:6:118","memberName":"sender","nodeType":"MemberAccess","src":"9391:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":67728,"id":67739,"nodeType":"Return","src":"9384:17:118"}]},"id":67741,"nodeType":"IfStatement","src":"9296:116:118","trueBody":{"id":67736,"nodeType":"Block","src":"9323:41:118","statements":[{"expression":{"expression":{"id":67733,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"9344:2:118","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":67734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9347:6:118","memberName":"origin","nodeType":"MemberAccess","src":"9344:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":67728,"id":67735,"nodeType":"Return","src":"9337:16:118"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_source","nameLocation":"9245:7:118","parameters":{"id":67725,"nodeType":"ParameterList","parameters":[],"src":"9252:2:118"},"returnParameters":{"id":67728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67743,"src":"9277:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67726,"name":"address","nodeType":"ElementaryTypeName","src":"9277:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9276:9:118"},"scope":67773,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":67772,"nodeType":"FunctionDefinition","src":"9424:243:118","nodes":[],"body":{"id":67771,"nodeType":"Block","src":"9492:175:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":67752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67750,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67747,"src":"9506:5:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":67751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9515:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9506:10:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":67770,"nodeType":"IfStatement","src":"9502:159:118","trueBody":{"id":67769,"nodeType":"Block","src":"9518:143:118","statements":[{"assignments":[67754],"declarations":[{"constant":false,"id":67754,"mutability":"mutable","name":"success","nameLocation":"9537:7:118","nodeType":"VariableDeclaration","scope":67769,"src":"9532:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":67753,"name":"bool","nodeType":"ElementaryTypeName","src":"9532:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":67763,"initialValue":{"arguments":[{"id":67760,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67745,"src":"9573:11:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67761,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67747,"src":"9586:5:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":67756,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67178,"src":"9554:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":67757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9554:8:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67755,"name":"_wvara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67724,"src":"9547:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_contract$_IWrappedVara_$65497_$","typeString":"function (address) view returns (contract IWrappedVara)"}},"id":67758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9547:16:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$65497","typeString":"contract IWrappedVara"}},"id":67759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9564:8:118","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43780,"src":"9547:25:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":67762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9547:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"9532:60:118"},{"expression":{"arguments":[{"id":67765,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67754,"src":"9614:7:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207472616e73666572205756617261","id":67766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9623:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_67b810931d6bc27bebc6c54d267fd2daa6fef9e1939bb1712f8d92f0ff26a989","typeString":"literal_string \"failed to transfer WVara\""},"value":"failed to transfer WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_67b810931d6bc27bebc6c54d267fd2daa6fef9e1939bb1712f8d92f0ff26a989","typeString":"literal_string \"failed to transfer WVara\""}],"id":67764,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9606:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9606:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67768,"nodeType":"ExpressionStatement","src":"9606:44:118"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_transferValue","nameLocation":"9433:14:118","parameters":{"id":67748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67745,"mutability":"mutable","name":"destination","nameLocation":"9456:11:118","nodeType":"VariableDeclaration","scope":67772,"src":"9448:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67744,"name":"address","nodeType":"ElementaryTypeName","src":"9448:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67747,"mutability":"mutable","name":"value","nameLocation":"9477:5:118","nodeType":"VariableDeclaration","scope":67772,"src":"9469:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":67746,"name":"uint128","nodeType":"ElementaryTypeName","src":"9469:7:118","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9447:36:118"},"returnParameters":{"id":67749,"nodeType":"ParameterList","parameters":[],"src":"9492:0:118"},"scope":67773,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":67044,"name":"IMirror","nameLocations":["422:7:118"],"nodeType":"IdentifierPath","referencedDeclaration":65178,"src":"422:7:118"},"id":67045,"nodeType":"InheritanceSpecifier","src":"422:7:118"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[67773,65178],"name":"Mirror","nameLocation":"412:6:118","scope":67774,"usedErrors":[],"usedEvents":[65043,65054,65065,65072,65077,65088,65099,65106]}],"license":"UNLICENSED"},"id":118} \ No newline at end of file diff --git a/ethexe/ethereum/MirrorProxy.json b/ethexe/ethereum/MirrorProxy.json index 46191444c09..f0198a972eb 100644 --- a/ethexe/ethereum/MirrorProxy.json +++ b/ethexe/ethereum/MirrorProxy.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"bytecode":{"object":"0x60a034606b57601f61021038819003918201601f19168301916001600160401b03831184841017606f57808492602094604052833981010312606b57516001600160a01b0381168103606b5760805260405161018c908161008482396080518181816023015260e10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060405260043610156100c0575b63e6fabc0960e01b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea2646970667358221220b525deb98568ec7ddc9aaafeee2a055d9536f5e9e10a52c4dfb61118c58e90b964736f6c634300081a0033","sourceMap":"259:286:158:-:0;;;;;;;;;;;;;-1:-1:-1;;259:286:158;;;;-1:-1:-1;;;;;259:286:158;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:286:158;;;;;;386:16;;259:286;;;;;;;;386:16;259:286;;;;;;;;;;;;-1:-1:-1;259:286:158;;;;;;-1:-1:-1;259:286:158;;;;;-1:-1:-1;259:286:158","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610156100c0575b63e6fabc0960e01b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea2646970667358221220b525deb98568ec7ddc9aaafeee2a055d9536f5e9e10a52c4dfb61118c58e90b964736f6c634300081a0033","sourceMap":"259:286:158:-:0;;;;;;;;;-1:-1:-1;;;;259:286:158;508:28;;;;;259:286;;516:6;-1:-1:-1;;;;;259:286:158;508:28;;;;;;-1:-1:-1;508:28:158;;2381:17:47;508:28:158;;;;;;;;;259:286;;;;;;;;;;;;;;;;;;508:28;259:286;;;;508:28;;:::i;:::-;2381:17:47;:::i;259:286:158:-;;;;-1:-1:-1;259:286:158;;;;;-1:-1:-1;259:286:158;508:28;;;;;;259:286;;;-1:-1:-1;259:286:158;;;;;;;;;;;;;;;;;;;-1:-1:-1;;259:286:158;;;;309:31;-1:-1:-1;;;;;259:286:158;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:286:158;;;;;;;:::o;949:895:47:-;1019:819;949:895;;1019:819;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{"75235":[{"start":35,"length":32},{"start":225,"length":32}]}},"methodIdentifiers":{"router()":"f887ea40"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MirrorProxy.sol\":\"MirrorProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xdbae96165e93f374f6b0ab185c3ce61e5eed76cce317349eda4aab002f3998c7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://275140952f5612b545caf34e66af939a42a6156ddf9ae312192e9dd3010c8be2\",\"dweb:/ipfs/QmZYtSdHt5GkL5GT4gqNsuoryZ1whB1AQfmSmoNCHhicQc\"]},\"src/MirrorProxy.sol\":{\"keccak256\":\"0x5aa79edf0ac44b938c81e38e5a63e5ed53078a67870e910cecf1019766f40326\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://dc722a0b42b2ad97f63486a200bfaed40f33dad6d0ea1697fd0c2d6cc6280316\",\"dweb:/ipfs/Qmb66iPmELyjyzaBDMaNr3XVL5QHCcf9s9cvhQuTceDHsP\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xa543913342b4408d07fe4d884280b5c1d2430e8386713e9b6e1a5924e3e2bfbc\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9e466d986795dab2d942984fcbf03e8e8995cd17e4221f1dfca715af091d03ec\",\"dweb:/ipfs/QmWo16RoqKERSYornA8qPqL32rYveeEHxiHmDHongS6uzy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/MirrorProxy.sol":"MirrorProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xdbae96165e93f374f6b0ab185c3ce61e5eed76cce317349eda4aab002f3998c7","urls":["bzz-raw://275140952f5612b545caf34e66af939a42a6156ddf9ae312192e9dd3010c8be2","dweb:/ipfs/QmZYtSdHt5GkL5GT4gqNsuoryZ1whB1AQfmSmoNCHhicQc"],"license":"UNLICENSED"},"src/MirrorProxy.sol":{"keccak256":"0x5aa79edf0ac44b938c81e38e5a63e5ed53078a67870e910cecf1019766f40326","urls":["bzz-raw://dc722a0b42b2ad97f63486a200bfaed40f33dad6d0ea1697fd0c2d6cc6280316","dweb:/ipfs/Qmb66iPmELyjyzaBDMaNr3XVL5QHCcf9s9cvhQuTceDHsP"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xa543913342b4408d07fe4d884280b5c1d2430e8386713e9b6e1a5924e3e2bfbc","urls":["bzz-raw://9e466d986795dab2d942984fcbf03e8e8995cd17e4221f1dfca715af091d03ec","dweb:/ipfs/QmWo16RoqKERSYornA8qPqL32rYveeEHxiHmDHongS6uzy"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/MirrorProxy.sol","id":75260,"exportedSymbols":{"IMirrorProxy":[73646],"IRouter":[73896],"MirrorProxy":[75259],"Proxy":[42208]},"nodeType":"SourceUnit","src":"39:507:158","nodes":[{"id":75223,"nodeType":"PragmaDirective","src":"39:24:158","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":75225,"nodeType":"ImportDirective","src":"65:62:158","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","nameLocation":"-1:-1:-1","scope":75260,"sourceUnit":42209,"symbolAliases":[{"foreign":{"id":75224,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42208,"src":"73:5:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75227,"nodeType":"ImportDirective","src":"128:48:158","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":75260,"sourceUnit":73647,"symbolAliases":[{"foreign":{"id":75226,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73646,"src":"136:12:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75229,"nodeType":"ImportDirective","src":"177:38:158","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":75260,"sourceUnit":73897,"symbolAliases":[{"foreign":{"id":75228,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"185:7:158","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75259,"nodeType":"ContractDefinition","src":"259:286:158","nodes":[{"id":75235,"nodeType":"VariableDeclaration","src":"309:31:158","nodes":[],"baseFunctions":[73645],"constant":false,"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"334:6:158","scope":75259,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75234,"name":"address","nodeType":"ElementaryTypeName","src":"309:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":75245,"nodeType":"FunctionDefinition","src":"347:62:158","nodes":[],"body":{"id":75244,"nodeType":"Block","src":"376:33:158","nodes":[],"statements":[{"expression":{"id":75242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":75240,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75235,"src":"386:6:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75241,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75237,"src":"395:7:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"386:16:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75243,"nodeType":"ExpressionStatement","src":"386:16:158"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75237,"mutability":"mutable","name":"_router","nameLocation":"367:7:158","nodeType":"VariableDeclaration","scope":75245,"src":"359:15:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75236,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"358:17:158"},"returnParameters":{"id":75239,"nodeType":"ParameterList","parameters":[],"src":"376:0:158"},"scope":75259,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75258,"nodeType":"FunctionDefinition","src":"415:128:158","nodes":[],"body":{"id":75257,"nodeType":"Block","src":"491:52:158","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":75252,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75235,"src":"516:6:158","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75251,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"508:7:158","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$73896_$","typeString":"type(contract IRouter)"}},"id":75253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:15:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$73896","typeString":"contract IRouter"}},"id":75254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"524:10:158","memberName":"mirrorImpl","nodeType":"MemberAccess","referencedDeclaration":73731,"src":"508:26:158","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":75255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:28:158","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75250,"id":75256,"nodeType":"Return","src":"501:35:158"}]},"baseFunctions":[42189],"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"424:15:158","overrides":{"id":75247,"nodeType":"OverrideSpecifier","overrides":[],"src":"464:8:158"},"parameters":{"id":75246,"nodeType":"ParameterList","parameters":[],"src":"439:2:158"},"returnParameters":{"id":75250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75258,"src":"482:7:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75248,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"481:9:158"},"scope":75259,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":75230,"name":"IMirrorProxy","nameLocations":["283:12:158"],"nodeType":"IdentifierPath","referencedDeclaration":73646,"src":"283:12:158"},"id":75231,"nodeType":"InheritanceSpecifier","src":"283:12:158"},{"baseName":{"id":75232,"name":"Proxy","nameLocations":["297:5:158"],"nodeType":"IdentifierPath","referencedDeclaration":42208,"src":"297:5:158"},"id":75233,"nodeType":"InheritanceSpecifier","src":"297:5:158"}],"canonicalName":"MirrorProxy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[75259,42208,73646],"name":"MirrorProxy","nameLocation":"268:11:158","scope":75260,"usedErrors":[],"usedEvents":[]}],"license":"UNLICENSED"},"id":158} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"bytecode":{"object":"0x60a034606b57601f61021038819003918201601f19168301916001600160401b03831184841017606f57808492602094604052833981010312606b57516001600160a01b0381168103606b5760805260405161018c908161008482396080518181816023015260e10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060405260043610156100c0575b63e6fabc0960e01b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212205c9b1b7b667b8036fd369127f3d67ec9fd80e37388b905666820dfd840a1044c64736f6c634300081c0033","sourceMap":"259:286:119:-:0;;;;;;;;;;;;;-1:-1:-1;;259:286:119;;;;-1:-1:-1;;;;;259:286:119;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:286:119;;;;;;386:16;;259:286;;;;;;;;386:16;259:286;;;;;;;;;;;;-1:-1:-1;259:286:119;;;;;;-1:-1:-1;259:286:119;;;;;-1:-1:-1;259:286:119","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610156100c0575b63e6fabc0960e01b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212205c9b1b7b667b8036fd369127f3d67ec9fd80e37388b905666820dfd840a1044c64736f6c634300081c0033","sourceMap":"259:286:119:-:0;;;;;;;;;-1:-1:-1;;;;259:286:119;508:28;;;;;259:286;;516:6;-1:-1:-1;;;;;259:286:119;508:28;;;;;;-1:-1:-1;508:28:119;;2381:17:40;508:28:119;;;;;;;;;259:286;;;;;;;;;;;;;;;;;;508:28;259:286;;;;508:28;;:::i;:::-;2381:17:40;:::i;259:286:119:-;;;;-1:-1:-1;259:286:119;;;;;-1:-1:-1;259:286:119;508:28;;;;;;259:286;;;-1:-1:-1;259:286:119;;;;;;;;;;;;;;;;;;;-1:-1:-1;;259:286:119;;;;309:31;-1:-1:-1;;;;;259:286:119;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:286:119;;;;;;;:::o;949:895:40:-;1019:819;949:895;;1019:819;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{"67787":[{"start":35,"length":32},{"start":225,"length":32}]}},"methodIdentifiers":{"router()":"f887ea40"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MirrorProxy.sol\":\"MirrorProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0\",\"dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x5f6e8be4d5738e41071deb350bd50279df85b4df544d6abe87faaf5ef6a399cf\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3c8df2e9d20982b1f25e3be114acc735e597ef1cecd8b9f4528080ca982e618b\",\"dweb:/ipfs/QmRZQrTE6o5y5KWdRzE4Usyf3tdFjqs1CGu8kad2PFWEFW\"]},\"src/MirrorProxy.sol\":{\"keccak256\":\"0x5aa79edf0ac44b938c81e38e5a63e5ed53078a67870e910cecf1019766f40326\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://dc722a0b42b2ad97f63486a200bfaed40f33dad6d0ea1697fd0c2d6cc6280316\",\"dweb:/ipfs/Qmb66iPmELyjyzaBDMaNr3XVL5QHCcf9s9cvhQuTceDHsP\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xa95dec92e5eadb21249fdec7b3246d666e2fbaf6d994030bb75176c642fa15de\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c05bd2a8dacd478bea5797e034f782d8859dcf9a047d1a8250f71f587d9b7831\",\"dweb:/ipfs/QmSTqy7XvzeDpAqtVkSXXCwtyXspe2zkFqVeuDamguoqRF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/MirrorProxy.sol":"MirrorProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed","urls":["bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0","dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575","urls":["bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e","dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x5f6e8be4d5738e41071deb350bd50279df85b4df544d6abe87faaf5ef6a399cf","urls":["bzz-raw://3c8df2e9d20982b1f25e3be114acc735e597ef1cecd8b9f4528080ca982e618b","dweb:/ipfs/QmRZQrTE6o5y5KWdRzE4Usyf3tdFjqs1CGu8kad2PFWEFW"],"license":"UNLICENSED"},"src/MirrorProxy.sol":{"keccak256":"0x5aa79edf0ac44b938c81e38e5a63e5ed53078a67870e910cecf1019766f40326","urls":["bzz-raw://dc722a0b42b2ad97f63486a200bfaed40f33dad6d0ea1697fd0c2d6cc6280316","dweb:/ipfs/Qmb66iPmELyjyzaBDMaNr3XVL5QHCcf9s9cvhQuTceDHsP"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xa95dec92e5eadb21249fdec7b3246d666e2fbaf6d994030bb75176c642fa15de","urls":["bzz-raw://c05bd2a8dacd478bea5797e034f782d8859dcf9a047d1a8250f71f587d9b7831","dweb:/ipfs/QmSTqy7XvzeDpAqtVkSXXCwtyXspe2zkFqVeuDamguoqRF"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/MirrorProxy.sol","id":67812,"exportedSymbols":{"IMirrorProxy":[65223],"IRouter":[65486],"MirrorProxy":[67811],"Proxy":[42880]},"nodeType":"SourceUnit","src":"39:507:119","nodes":[{"id":67775,"nodeType":"PragmaDirective","src":"39:24:119","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":67777,"nodeType":"ImportDirective","src":"65:62:119","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","nameLocation":"-1:-1:-1","scope":67812,"sourceUnit":42881,"symbolAliases":[{"foreign":{"id":67776,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42880,"src":"73:5:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67779,"nodeType":"ImportDirective","src":"128:48:119","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":67812,"sourceUnit":65224,"symbolAliases":[{"foreign":{"id":67778,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65223,"src":"136:12:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67781,"nodeType":"ImportDirective","src":"177:38:119","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":67812,"sourceUnit":65487,"symbolAliases":[{"foreign":{"id":67780,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65486,"src":"185:7:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67811,"nodeType":"ContractDefinition","src":"259:286:119","nodes":[{"id":67787,"nodeType":"VariableDeclaration","src":"309:31:119","nodes":[],"baseFunctions":[65222],"constant":false,"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"334:6:119","scope":67811,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67786,"name":"address","nodeType":"ElementaryTypeName","src":"309:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":67797,"nodeType":"FunctionDefinition","src":"347:62:119","nodes":[],"body":{"id":67796,"nodeType":"Block","src":"376:33:119","nodes":[],"statements":[{"expression":{"id":67794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":67792,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67787,"src":"386:6:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":67793,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67789,"src":"395:7:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"386:16:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":67795,"nodeType":"ExpressionStatement","src":"386:16:119"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":67790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67789,"mutability":"mutable","name":"_router","nameLocation":"367:7:119","nodeType":"VariableDeclaration","scope":67797,"src":"359:15:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67788,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"358:17:119"},"returnParameters":{"id":67791,"nodeType":"ParameterList","parameters":[],"src":"376:0:119"},"scope":67811,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":67810,"nodeType":"FunctionDefinition","src":"415:128:119","nodes":[],"body":{"id":67809,"nodeType":"Block","src":"491:52:119","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":67804,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67787,"src":"516:6:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67803,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65486,"src":"508:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$65486_$","typeString":"type(contract IRouter)"}},"id":67805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:15:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$65486","typeString":"contract IRouter"}},"id":67806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"524:10:119","memberName":"mirrorImpl","nodeType":"MemberAccess","referencedDeclaration":65319,"src":"508:26:119","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":67807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:28:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":67802,"id":67808,"nodeType":"Return","src":"501:35:119"}]},"baseFunctions":[42861],"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"424:15:119","overrides":{"id":67799,"nodeType":"OverrideSpecifier","overrides":[],"src":"464:8:119"},"parameters":{"id":67798,"nodeType":"ParameterList","parameters":[],"src":"439:2:119"},"returnParameters":{"id":67802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67801,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67810,"src":"482:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67800,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"481:9:119"},"scope":67811,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":67782,"name":"IMirrorProxy","nameLocations":["283:12:119"],"nodeType":"IdentifierPath","referencedDeclaration":65223,"src":"283:12:119"},"id":67783,"nodeType":"InheritanceSpecifier","src":"283:12:119"},{"baseName":{"id":67784,"name":"Proxy","nameLocations":["297:5:119"],"nodeType":"IdentifierPath","referencedDeclaration":42880,"src":"297:5:119"},"id":67785,"nodeType":"InheritanceSpecifier","src":"297:5:119"}],"canonicalName":"MirrorProxy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[67811,42880,65223],"name":"MirrorProxy","nameLocation":"268:11:119","scope":67812,"usedErrors":[],"usedEvents":[]}],"license":"UNLICENSED"},"id":119} \ No newline at end of file diff --git a/ethexe/ethereum/Router.json b/ethexe/ethereum/Router.json index 37e608b251f..fde5c74dd89 100644 --- a/ethexe/ethereum/Router.json +++ b/ethexe/ethereum/Router.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"areValidators","inputs":[{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum Gear.CodeState"}],"stateMutability":"view"},{"type":"function","name":"codesStates","inputs":[{"name":"_codesIds","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint8[]","internalType":"enum Gear.CodeState[]"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"_blockCommitments","type":"tuple[]","internalType":"struct Gear.BlockCommitment[]","components":[{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint48","internalType":"uint48"},{"name":"previousCommittedBlock","type":"bytes32","internalType":"bytes32"},{"name":"predecessorBlock","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct Gear.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"_codeCommitments","type":"tuple[]","internalType":"struct Gear.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeSettings","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.ComputationSettings","components":[{"name":"threshold","type":"uint64","internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","internalType":"uint128"}]}],"stateMutability":"view"},{"type":"function","name":"createProgram","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"createProgramWithDecoder","inputs":[{"name":"_decoderImpl","type":"address","internalType":"address"},{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isValidator","inputs":[{"name":"_validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"latestCommittedBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"lookupGenesisHash","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mirrorImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxyImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"_programId","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCodeIds","inputs":[{"name":"_programsIds","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"newMirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BlockCommitted","inputs":[{"name":"hash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ComputationSettingsChanged","inputs":[{"name":"threshold","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValidatorsChanged","inputs":[],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051612b7590816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081627a32e714611ec85750806301b1d156146114475780631c149d8a146112fa57806328e24b3d146112d05780633d43b4181461127e57806365ecfea214611246578063666d124c146111455780636c2eb35014610ebf578063715018a614610e585780638074b45514610d9457806382bdeaad14610c8f57806384d22a4f14610c2757806388f50cf014610bef5780638b1edf1e14610b2a5780638da5cb5b14610af65780638f381dbe14610ab15780639067088e14610a6957806396a2ddfa14610a3c578063baaf020114610941578063c13911e8146108fd578063c9f16a11146108d0578063ca1e781914610859578063e6fabc0914610821578063e97d3eb3146105fd578063ed612f8c146105d0578063edc872251461059c578063efd81abc1461056b578063f2fde38b14610545578063f8453e7c146101b65763facd743b14610165575f80fd5b346101b25760203660031901126101b25761017e611f22565b60095f80516020612b0083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b5f80fd5b346101b25760a03660031901126101b2576101cf611f22565b6024356001600160a01b03811691908290036101b2576044356001600160a01b03811692908390036101b2576064356001600160a01b038116908190036101b2576084356001600160401b0381116101b25761022f903690600401611ef2565b915f80516020612b208339815191525460ff8160401c1615956001600160401b0382168015908161053d575b6001149081610533575b15908161052a575b5061051b5767ffffffffffffffff1982166001175f80516020612b20833981519152556102b091876104ef575b506102a3612998565b6102ab612998565b612270565b60409586516102bf8882612042565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526102f36124ba565b5190205f1981019081116104db5787519060208201908152602082526103198983612042565b60ff19915190201694855f80516020612b008339815191525561033a612758565b80518755600187019063ffffffff60208201511669ffffffffffff000000008b845493015160201b169169ffffffffffffffffffff1916171790558288805161038281612027565b8381526020810185905201526004860180546001600160a01b03199081166001600160a01b0393841617909155600587018054821693831693909317909255600686018054909216921691909117905560078301805461ffff1916611a0a1790556103ec8261218c565b916103f986519384612042565b808352602083019060051b8201913683116101b257905b8282106104c35750505090610427600a928261279d565b61042f6121c7565b506509184e72a000602085516104448161200c565b639502f900815201520180546001600160c01b0319166d09184e72a000000000009502f90017905561047257005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160018152a1005b602080916104d084611f38565b815201910190610410565b634e487b7160e01b5f52601160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f80516020612b20833981519152558861029a565b63f92ee8a960e01b5f5260045ffd5b9050158961026d565b303b159150610265565b88915061025b565b346101b25760203660031901126101b257610569610561611f22565b6102ab6124ba565b005b346101b2575f3660031901126101b257602061ffff60075f80516020612b0083398151915254015416604051908152f35b346101b2575f3660031901126101b25760206105c860075f80516020612b0083398151915254016128c4565b604051908152f35b346101b2575f3660031901126101b257602060085f80516020612b00833981519152540154604051908152f35b346101b25760403660031901126101b2576004356001600160401b0381116101b257366023820112156101b25780600401356001600160401b0381116101b2573660248260061b840101116101b2576024356001600160401b0381116101b25761066b903690600401611ef2565b905f80516020612b00833981519152549361068885541515611f9a565b600b8501925f9260605b86851015610805578460061b8401602481013591825f528760205260ff60405f20541660038110156107f15760010361078e57600192610741604461076e94016106db81612255565b1561077657825f528a60205260405f20600260ff19825416179055600e8d016107048154612262565b90555b61071081612255565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020604051868152a2612255565b6040519060208201928352151560f81b604082015260218152610765604182612042565b51902090612063565b940193610692565b825f528a60205260405f2060ff198154169055610707565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b9161081c91886105699460208151910120906123c2565b612092565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600401546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b25761088360085f80516020612b00833981519152540161213b565b6040518091602082016020835281518091526020604084019201905f5b8181106108ae575050500390f35b82516001600160a01b03168452859450602093840193909201916001016108a0565b346101b2575f3660031901126101b257602060025f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257600b5f80516020612b0083398151915254016004355f52602052602060ff60405f20541661093f6040518092611f8d565bf35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610971903690600401611ef2565b5f80516020612b00833981519152549161098a8261218c565b926109986040519485612042565b8284526109a48361218c565b602085019390601f1901368537600c5f9201915b818110610a03578486604051918291602083019060208452518091526040830191905f5b8181106109ea575050500390f35b82518452859450602093840193909201916001016109dc565b80610a19610a1460019385886121a3565b6121df565b828060a01b03165f528360205260405f2054610a3582896121b3565b52016109b8565b346101b2575f3660031901126101b2576020600d5f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257610a82611f22565b600c5f80516020612b0083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610aec610ae66020923690600401611ef2565b906121f3565b6040519015158152f35b346101b2575f3660031901126101b2575f80516020612ae0833981519152546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b2575f80516020612b00833981519152548054610baa5763ffffffff60018201541640908115610b655755005b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b346101b2575f3660031901126101b2575f80516020612b0083398151915254600601546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b257610c3f6121c7565b506040600a5f80516020612b0083398151915254016001600160801b03825191610c688361200c565b548160206001600160401b038316948581520191851c168152835192835251166020820152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610cbf903690600401611ef2565b5f80516020612b008339815191525491610cd88261218c565b92610ce66040519485612042565b828452610cf28361218c565b602085019390601f1901368537600b5f9201915b818110610d5b578486604051918291602083019060208452518091526040830191905f5b818110610d38575050500390f35b9193509160208082610d4d6001948851611f8d565b019401910191849392610d2a565b610d668183866121a3565b355f528260205260ff60405f20541690610d8081886121b3565b9160038110156107f1576001925201610d06565b346101b25760803660031901126101b2576044356001600160401b0381116101b257610dc4903690600401611f4c565b90606435916001600160801b03831683036101b257610de8836024356004356124ed565b6001600160a01b0390911692909190833b156101b257610e1f5f9360405196879485946306f0ee9760e51b865233600487016120fe565b038183855af1918215610e4d57602092610e3d575b50604051908152f35b5f610e4791612042565b82610e34565b6040513d5f823e3d90fd5b346101b2575f3660031901126101b257610e706124ba565b5f80516020612ae083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f3660031901126101b257610ed76124ba565b5f80516020612b208339815191525460ff8160401c168015611131575b61051b5768ffffffffffffffffff191668010000000000000002175f80516020612b20833981519152555f80516020612b008339815191525460408051610f3b8282612042565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252610f6f6124ba565b5190205f198101919082116104db577fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d292600a80602094845190868201908152868252610fbc8683612042565b60ff19915190201692835f80516020612b0083398151915255610fdd612758565b80518555600185019063ffffffff888201511669ffffffffffff000000008884549301518a1b169169ffffffffffffffffffff1916171790556004810160048501908082036110e3575b505061ffff600782015416600785019061ffff198254161790556110566110506008830161213b565b8561279d565b01910190808203611091575b505060ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160028152a1005b806001600160401b03806001600160801b03935416166001600160401b031984541617835554831c16600160401b600160c01b03825491841b1690600160401b600160c01b0319161790558380611062565b5481546001600160a01b03199081166001600160a01b039283161790925560058381015490870180548416918316919091179055600680840154908701805490931691161790558780611027565b5060026001600160401b0382161015610ef4565b346101b25760a03660031901126101b25761115e611f22565b6044356024356064356001600160401b0381116101b257611183903690600401611f4c565b90608435946001600160801b03861686036101b2576111a38686866124ed565b949060018060a01b03169560405190602082019283526040820152604081526111cd606082612042565b519020853b156101b257604051635b1b84f760e01b81526001600160a01b03909216600483015260248201525f8160448183895af18015610e4d57611236575b50833b156101b257610e1f5f9360405196879485946306f0ee9760e51b865233600487016120fe565b5f61124091612042565b8561120d565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600501546040516001600160a01b039091168152602090f35b346101b25760203660031901126101b257611297611f22565b61129f6124ba565b5f80516020612b008339815191525460040180546001600160a01b0319166001600160a01b03909216919091179055005b346101b2575f3660031901126101b25760205f80516020612b008339815191525454604051908152f35b346101b25760403660031901126101b257602435600435811580159061143d575b1561140257600b5f80516020612b008339815191525461133d81541515611f9a565b0190805f528160205260ff60405f20541660038110156107f1576113a1577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526013602482015272189b1bd88818d85b89dd08189948199bdd5b99606a1b6044820152606490fd5b505f49151561131b565b346101b25760403660031901126101b2576004356001600160401b0381116101b257611477903690600401611ef2565b906024356001600160401b0381116101b257611497903690600401611ef2565b9190927f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c611eb95792919060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f80516020612b00833981519152549161150383541515611f9a565b5f9160605b86841015611e7d578360051b82013594609e19833603018612156101b25760028101546040878501013503611e2a57611546606087850101356128f4565b15611dd65791929385840135602061156181898801016122e1565b65ffffffffffff604051916115758361200c565b84835216918291015281600286015565ffffffffffff196003860154161760038501556060945f985b6115ae828a0160808101906122f4565b90508a1015611d2e576115d18a6115cb848c0160808101906122f4565b90612329565b975f80516020612b00833981519152546115ea8a6121df565b6001600160a01b03165f908152600c8201602052604090205415611cd157600601546001600160801b03906020906001600160a01b031660448c5f61163a6060611633846121df565b9301612937565b60405163a9059cbb60e01b81526001600160a01b0390931660048401529590951660248201529384928391905af18015610e4d57611ca5575b506001600160a01b036116858a6121df565b169b5f9260605b61169960808d018d612963565b9050851015611820576116af60808d018d612963565b86929192101561180c578f91606087020180359160208201936116d1856121df565b9260408101936116e085612937565b833b156101b2576040516314503e5160e01b8152600481018890526001600160a01b0390921660248301526001600160801b03166044820152915f908390606490829084905af1918215610e4d576060926117fc575b503603126101b257602080936117f493604060019761177061176583519261175d84612027565b868452611f38565b938487840152611f79565b91018190526040805185810194855260609390931b6bffffffffffffffffffffffff19169083015260801b6fffffffffffffffffffffffffffffffff19166054820152604481526117c2606482612042565b6040519584879551918291018587015e840190838201905f8252519283915e01015f815203601f198101835282612042565b94019361168c565b5f61180691612042565b5f611736565b634e487b7160e01b5f52603260045260245ffd5b98909192979b94959693509b989b6060925f935b61184160a08e018e6122f4565b9050851015611b36578f9061185f868f8060a06115cb9201906122f4565b9060808201359283155f14611a725761187a602084016121df565b611887604085018561234b565b909261189560608701612937565b92813b156101b2575f8781956001600160801b036118e4604051998a988997889663c2df600960e01b885235600488015260018060a01b031660248701526080604487015260848601916120de565b9116606483015203925af18015610e4d57611a62575b505b8136039260c084126101b2576040519360a085018581106001600160401b03821117611a4e576040528335855261193560208501611f38565b916020860192835260408501356001600160401b0381116101b257850136601f820112156101b25761196e90369060208135910161237d565b9460408701958652604061198460608301611f79565b6060890190815293607f1901126101b25760a090604051926119a58461200c565b835201356001600160e01b0319811681036101b2576054611a46968360349360019a602061076597019182528260808201525197519251965191519063ffffffff60e01b9051169060206040519889958287019b8c526001600160601b03199060601b1660408701528051918291018787015e8401926001600160801b03199060801b16858401526064830152608482015203016014810184520182612042565b940193611834565b634e487b7160e01b5f52604160045260245ffd5b5f611a6c91612042565b5f6118fa565b611a7e602084016121df565b90611a8c604085018561234b565b91611a9960608701612937565b9260a087013563ffffffff60e01b81168091036101b257823b156101b25760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701525f9486948593879385939290916001600160801b0391611aff9160a48701916120de565b921660448401528b6064840152608483015203925af18015610e4d57611b26575b506118fc565b5f611b3091612042565b5f611b20565b90969993509d939a90969d9c919c9b97949b604082019160018060a01b03611b5d846121df565b16611c4e575b602081013591863b156101b2575f80976024604051809a8193638ea59e1d60e01b83528860048401525af1958615610e4d57600197611c2e97611c3e575b50611bc06060611bb9611bb3866121df565b976121df565b9401612937565b90602081519101209160208151910120926040519460208601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261076560b882612042565b960198999199969294909661159e565b5f611c4891612042565b5f611ba1565b611c57836121df565b863b156101b257604051630959112b60e11b81526001600160a01b0390911660048201525f81602481838b5af18015610e4d57611c95575b50611b63565b5f611c9f91612042565b5f611c8f565b611cc59060203d8111611cca575b611cbd8183612042565b81019061294b565b611673565b503d611cb3565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9498509690611dc992999695600194927fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a16060611d786020838d01016122e1565b926020815191012091604051936020850195865265ffffffffffff60d01b9060d01b1660408501526040818d01013560468501528b010135606683015260868201526086815261076560a682612042565b9601929594939094611508565b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b604482015264040d0c2e6d60db1b6064820152608490fd5b61081c838787611e949460208151910120906123c2565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b346101b2575f3660031901126101b257602090600e5f80516020612b008339815191525401548152f35b9181601f840112156101b2578235916001600160401b0383116101b2576020808501948460051b0101116101b257565b600435906001600160a01b03821682036101b257565b35906001600160a01b03821682036101b257565b9181601f840112156101b2578235916001600160401b0383116101b257602083818601950101116101b257565b35906001600160801b03821682036101b257565b9060038210156107f15752565b15611fa157565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b604081019081106001600160401b03821117611a4e57604052565b606081019081106001600160401b03821117611a4e57604052565b90601f801991011681019081106001600160401b03821117611a4e57604052565b602080612090928195946040519682889351918291018585015e8201908382015203018085520183612042565b565b1561209957565b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b9395949061212e6001600160801b0393606095859360018060a01b031688526080602089015260808801916120de565b9616604085015216910152565b90604051918281549182825260208201905f5260205f20925f5b81811061216a57505061209092500383612042565b84546001600160a01b0316835260019485019487945060209093019201612155565b6001600160401b038111611a4e5760051b60200190565b919081101561180c5760051b0190565b805182101561180c5760209160051b010190565b604051906121d48261200c565b5f6020838281520152565b356001600160a01b03811681036101b25790565b5f80516020612b0083398151915254600901905f5b8381106122185750505050600190565b612226610a148286856121a3565b6001600160a01b03165f9081526020849052604090205460ff161561224d57600101612208565b505050505f90565b3580151581036101b25790565b5f1981146104db5760010190565b6001600160a01b031680156122ce575f80516020612ae083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff811681036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b257602001918160051b360383136101b257565b919081101561180c5760051b8101359060be19813603018212156101b2570190565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019181360383136101b257565b9291926001600160401b038211611a4e57604051916123a6601f8201601f191660200184612042565b8294818452818301116101b2578281602093845f960137010152565b9190916123d1600782016128c4565b926040519060208201908152602082526123ec604083612042565b612428603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282612042565b5190205f9260095f9301925b868110156124af5761246a61246161245b6124548460051b86018661234b565b369161237d565b856129c3565b909291926129fd565b6001600160a01b03165f9081526020859052604090205460ff16612491575b600101612434565b9361249b90612262565b938585036124895750505050505050600190565b505050505050505f90565b5f80516020612ae0833981519152546001600160a01b031633036124da57565b63118cdaa760e01b5f523360045260245ffd5b905f80516020612b00833981519152549261250a84541515611f9a565b825f52600b840160205260ff60405f20541660038110156107f1576002036126fc576001600160801b03166509184e72a000016001600160801b0381116104db5760068401546040516323b872dd60e01b81523360048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af1908115610e4d575f916126dd575b5015612698576e5af43d82803e903d91602b57fd5bf360058401549160405160208101918583526040820152604081526125da606082612042565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b1617602052603760095ff5916001600160a01b038316908115612689577f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf191600d602092825f52600c810184528560405f2055016126758154612262565b9055604051908152a2906509184e72a00090565b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b6126f6915060203d602011611cca57611cbd8183612042565b5f61259f565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f6040805161276681612027565b828152826020820152015260405161277d81612027565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b9060088201908154612880579091600901905f5b81518110156127f2576001906001600160a01b036127cf82856121b3565b5116828060a01b03165f528360205260405f208260ff19825416179055016127b1565b5080519291506001600160401b038311611a4e57680100000000000000008311611a4e57815483835580841061285a575b50602001905f5260205f205f5b83811061283d5750505050565b82516001600160a01b031681830155602090920191600101612830565b825f528360205f2091820191015b8181106128755750612823565b5f8155600101612868565b606460405162461bcd60e51b815260206004820152602060248201527f72656d6f76652070726576696f75732076616c696461746f72732066697273746044820152fd5b61ffff6001820154915416908181029181830414901517156104db5761270f81018091116104db57612710900490565b905f1943014381116104db57805b61290d575b505f9150565b804083810361291e57506001925050565b156129325780156104db575f190180612902565b612907565b356001600160801b03811681036101b25790565b908160209103126101b2575180151581036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019160608202360383136101b257565b60ff5f80516020612b208339815191525460401c16156129b457565b631afcd79f60e31b5f5260045ffd5b81519190604183036129f3576129ec9250602082015190606060408401519301515f1a90612a5d565b9192909190565b50505f9160029190565b60048110156107f15780612a0f575050565b60018103612a265763f645eedf60e01b5f5260045ffd5b60028103612a41575063fce698f760e01b5f5260045260245ffd5b600314612a4b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612ad4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610e4d575f516001600160a01b03811615612aca57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220bcddd1e327a9db67c9f2d99da008e3ca613651edd923d75a84279688b2dc90f264736f6c634300081a0033","sourceMap":"748:15445:159:-:0;;;;;;;8837:64:26;748:15445:159;;;;;;7896:76:26;;-1:-1:-1;;;;;;;;;;;748:15445:159;;7985:34:26;7981:146;;-1:-1:-1;748:15445:159;;;;;;;;;7981:146:26;-1:-1:-1;;;;;;748:15445:159;-1:-1:-1;;;;;748:15445:159;;;8837:64:26;748:15445:159;;;8087:29:26;;748:15445:159;;8087:29:26;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:26;;-1:-1:-1;7938:23:26;748:15445:159;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080806040526004361015610012575f80fd5b5f3560e01c9081627a32e714611ec85750806301b1d156146114475780631c149d8a146112fa57806328e24b3d146112d05780633d43b4181461127e57806365ecfea214611246578063666d124c146111455780636c2eb35014610ebf578063715018a614610e585780638074b45514610d9457806382bdeaad14610c8f57806384d22a4f14610c2757806388f50cf014610bef5780638b1edf1e14610b2a5780638da5cb5b14610af65780638f381dbe14610ab15780639067088e14610a6957806396a2ddfa14610a3c578063baaf020114610941578063c13911e8146108fd578063c9f16a11146108d0578063ca1e781914610859578063e6fabc0914610821578063e97d3eb3146105fd578063ed612f8c146105d0578063edc872251461059c578063efd81abc1461056b578063f2fde38b14610545578063f8453e7c146101b65763facd743b14610165575f80fd5b346101b25760203660031901126101b25761017e611f22565b60095f80516020612b0083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b5f80fd5b346101b25760a03660031901126101b2576101cf611f22565b6024356001600160a01b03811691908290036101b2576044356001600160a01b03811692908390036101b2576064356001600160a01b038116908190036101b2576084356001600160401b0381116101b25761022f903690600401611ef2565b915f80516020612b208339815191525460ff8160401c1615956001600160401b0382168015908161053d575b6001149081610533575b15908161052a575b5061051b5767ffffffffffffffff1982166001175f80516020612b20833981519152556102b091876104ef575b506102a3612998565b6102ab612998565b612270565b60409586516102bf8882612042565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526102f36124ba565b5190205f1981019081116104db5787519060208201908152602082526103198983612042565b60ff19915190201694855f80516020612b008339815191525561033a612758565b80518755600187019063ffffffff60208201511669ffffffffffff000000008b845493015160201b169169ffffffffffffffffffff1916171790558288805161038281612027565b8381526020810185905201526004860180546001600160a01b03199081166001600160a01b0393841617909155600587018054821693831693909317909255600686018054909216921691909117905560078301805461ffff1916611a0a1790556103ec8261218c565b916103f986519384612042565b808352602083019060051b8201913683116101b257905b8282106104c35750505090610427600a928261279d565b61042f6121c7565b506509184e72a000602085516104448161200c565b639502f900815201520180546001600160c01b0319166d09184e72a000000000009502f90017905561047257005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160018152a1005b602080916104d084611f38565b815201910190610410565b634e487b7160e01b5f52601160045260245ffd5b68ffffffffffffffffff191668010000000000000001175f80516020612b20833981519152558861029a565b63f92ee8a960e01b5f5260045ffd5b9050158961026d565b303b159150610265565b88915061025b565b346101b25760203660031901126101b257610569610561611f22565b6102ab6124ba565b005b346101b2575f3660031901126101b257602061ffff60075f80516020612b0083398151915254015416604051908152f35b346101b2575f3660031901126101b25760206105c860075f80516020612b0083398151915254016128c4565b604051908152f35b346101b2575f3660031901126101b257602060085f80516020612b00833981519152540154604051908152f35b346101b25760403660031901126101b2576004356001600160401b0381116101b257366023820112156101b25780600401356001600160401b0381116101b2573660248260061b840101116101b2576024356001600160401b0381116101b25761066b903690600401611ef2565b905f80516020612b00833981519152549361068885541515611f9a565b600b8501925f9260605b86851015610805578460061b8401602481013591825f528760205260ff60405f20541660038110156107f15760010361078e57600192610741604461076e94016106db81612255565b1561077657825f528a60205260405f20600260ff19825416179055600e8d016107048154612262565b90555b61071081612255565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020604051868152a2612255565b6040519060208201928352151560f81b604082015260218152610765604182612042565b51902090612063565b940193610692565b825f528a60205260405f2060ff198154169055610707565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b9161081c91886105699460208151910120906123c2565b612092565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600401546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b25761088360085f80516020612b00833981519152540161213b565b6040518091602082016020835281518091526020604084019201905f5b8181106108ae575050500390f35b82516001600160a01b03168452859450602093840193909201916001016108a0565b346101b2575f3660031901126101b257602060025f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257600b5f80516020612b0083398151915254016004355f52602052602060ff60405f20541661093f6040518092611f8d565bf35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610971903690600401611ef2565b5f80516020612b00833981519152549161098a8261218c565b926109986040519485612042565b8284526109a48361218c565b602085019390601f1901368537600c5f9201915b818110610a03578486604051918291602083019060208452518091526040830191905f5b8181106109ea575050500390f35b82518452859450602093840193909201916001016109dc565b80610a19610a1460019385886121a3565b6121df565b828060a01b03165f528360205260405f2054610a3582896121b3565b52016109b8565b346101b2575f3660031901126101b2576020600d5f80516020612b00833981519152540154604051908152f35b346101b25760203660031901126101b257610a82611f22565b600c5f80516020612b0083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610aec610ae66020923690600401611ef2565b906121f3565b6040519015158152f35b346101b2575f3660031901126101b2575f80516020612ae0833981519152546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b2575f80516020612b00833981519152548054610baa5763ffffffff60018201541640908115610b655755005b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b346101b2575f3660031901126101b2575f80516020612b0083398151915254600601546040516001600160a01b039091168152602090f35b346101b2575f3660031901126101b257610c3f6121c7565b506040600a5f80516020612b0083398151915254016001600160801b03825191610c688361200c565b548160206001600160401b038316948581520191851c168152835192835251166020820152f35b346101b25760203660031901126101b2576004356001600160401b0381116101b257610cbf903690600401611ef2565b5f80516020612b008339815191525491610cd88261218c565b92610ce66040519485612042565b828452610cf28361218c565b602085019390601f1901368537600b5f9201915b818110610d5b578486604051918291602083019060208452518091526040830191905f5b818110610d38575050500390f35b9193509160208082610d4d6001948851611f8d565b019401910191849392610d2a565b610d668183866121a3565b355f528260205260ff60405f20541690610d8081886121b3565b9160038110156107f1576001925201610d06565b346101b25760803660031901126101b2576044356001600160401b0381116101b257610dc4903690600401611f4c565b90606435916001600160801b03831683036101b257610de8836024356004356124ed565b6001600160a01b0390911692909190833b156101b257610e1f5f9360405196879485946306f0ee9760e51b865233600487016120fe565b038183855af1918215610e4d57602092610e3d575b50604051908152f35b5f610e4791612042565b82610e34565b6040513d5f823e3d90fd5b346101b2575f3660031901126101b257610e706124ba565b5f80516020612ae083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f3660031901126101b257610ed76124ba565b5f80516020612b208339815191525460ff8160401c168015611131575b61051b5768ffffffffffffffffff191668010000000000000002175f80516020612b20833981519152555f80516020612b008339815191525460408051610f3b8282612042565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252610f6f6124ba565b5190205f198101919082116104db577fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d292600a80602094845190868201908152868252610fbc8683612042565b60ff19915190201692835f80516020612b0083398151915255610fdd612758565b80518555600185019063ffffffff888201511669ffffffffffff000000008884549301518a1b169169ffffffffffffffffffff1916171790556004810160048501908082036110e3575b505061ffff600782015416600785019061ffff198254161790556110566110506008830161213b565b8561279d565b01910190808203611091575b505060ff60401b195f80516020612b2083398151915254165f80516020612b20833981519152555160028152a1005b806001600160401b03806001600160801b03935416166001600160401b031984541617835554831c16600160401b600160c01b03825491841b1690600160401b600160c01b0319161790558380611062565b5481546001600160a01b03199081166001600160a01b039283161790925560058381015490870180548416918316919091179055600680840154908701805490931691161790558780611027565b5060026001600160401b0382161015610ef4565b346101b25760a03660031901126101b25761115e611f22565b6044356024356064356001600160401b0381116101b257611183903690600401611f4c565b90608435946001600160801b03861686036101b2576111a38686866124ed565b949060018060a01b03169560405190602082019283526040820152604081526111cd606082612042565b519020853b156101b257604051635b1b84f760e01b81526001600160a01b03909216600483015260248201525f8160448183895af18015610e4d57611236575b50833b156101b257610e1f5f9360405196879485946306f0ee9760e51b865233600487016120fe565b5f61124091612042565b8561120d565b346101b2575f3660031901126101b2575f80516020612b0083398151915254600501546040516001600160a01b039091168152602090f35b346101b25760203660031901126101b257611297611f22565b61129f6124ba565b5f80516020612b008339815191525460040180546001600160a01b0319166001600160a01b03909216919091179055005b346101b2575f3660031901126101b25760205f80516020612b008339815191525454604051908152f35b346101b25760403660031901126101b257602435600435811580159061143d575b1561140257600b5f80516020612b008339815191525461133d81541515611f9a565b0190805f528160205260ff60405f20541660038110156107f1576113a1577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526013602482015272189b1bd88818d85b89dd08189948199bdd5b99606a1b6044820152606490fd5b505f49151561131b565b346101b25760403660031901126101b2576004356001600160401b0381116101b257611477903690600401611ef2565b906024356001600160401b0381116101b257611497903690600401611ef2565b9190927f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c611eb95792919060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f80516020612b00833981519152549161150383541515611f9a565b5f9160605b86841015611e7d578360051b82013594609e19833603018612156101b25760028101546040878501013503611e2a57611546606087850101356128f4565b15611dd65791929385840135602061156181898801016122e1565b65ffffffffffff604051916115758361200c565b84835216918291015281600286015565ffffffffffff196003860154161760038501556060945f985b6115ae828a0160808101906122f4565b90508a1015611d2e576115d18a6115cb848c0160808101906122f4565b90612329565b975f80516020612b00833981519152546115ea8a6121df565b6001600160a01b03165f908152600c8201602052604090205415611cd157600601546001600160801b03906020906001600160a01b031660448c5f61163a6060611633846121df565b9301612937565b60405163a9059cbb60e01b81526001600160a01b0390931660048401529590951660248201529384928391905af18015610e4d57611ca5575b506001600160a01b036116858a6121df565b169b5f9260605b61169960808d018d612963565b9050851015611820576116af60808d018d612963565b86929192101561180c578f91606087020180359160208201936116d1856121df565b9260408101936116e085612937565b833b156101b2576040516314503e5160e01b8152600481018890526001600160a01b0390921660248301526001600160801b03166044820152915f908390606490829084905af1918215610e4d576060926117fc575b503603126101b257602080936117f493604060019761177061176583519261175d84612027565b868452611f38565b938487840152611f79565b91018190526040805185810194855260609390931b6bffffffffffffffffffffffff19169083015260801b6fffffffffffffffffffffffffffffffff19166054820152604481526117c2606482612042565b6040519584879551918291018587015e840190838201905f8252519283915e01015f815203601f198101835282612042565b94019361168c565b5f61180691612042565b5f611736565b634e487b7160e01b5f52603260045260245ffd5b98909192979b94959693509b989b6060925f935b61184160a08e018e6122f4565b9050851015611b36578f9061185f868f8060a06115cb9201906122f4565b9060808201359283155f14611a725761187a602084016121df565b611887604085018561234b565b909261189560608701612937565b92813b156101b2575f8781956001600160801b036118e4604051998a988997889663c2df600960e01b885235600488015260018060a01b031660248701526080604487015260848601916120de565b9116606483015203925af18015610e4d57611a62575b505b8136039260c084126101b2576040519360a085018581106001600160401b03821117611a4e576040528335855261193560208501611f38565b916020860192835260408501356001600160401b0381116101b257850136601f820112156101b25761196e90369060208135910161237d565b9460408701958652604061198460608301611f79565b6060890190815293607f1901126101b25760a090604051926119a58461200c565b835201356001600160e01b0319811681036101b2576054611a46968360349360019a602061076597019182528260808201525197519251965191519063ffffffff60e01b9051169060206040519889958287019b8c526001600160601b03199060601b1660408701528051918291018787015e8401926001600160801b03199060801b16858401526064830152608482015203016014810184520182612042565b940193611834565b634e487b7160e01b5f52604160045260245ffd5b5f611a6c91612042565b5f6118fa565b611a7e602084016121df565b90611a8c604085018561234b565b91611a9960608701612937565b9260a087013563ffffffff60e01b81168091036101b257823b156101b25760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701525f9486948593879385939290916001600160801b0391611aff9160a48701916120de565b921660448401528b6064840152608483015203925af18015610e4d57611b26575b506118fc565b5f611b3091612042565b5f611b20565b90969993509d939a90969d9c919c9b97949b604082019160018060a01b03611b5d846121df565b16611c4e575b602081013591863b156101b2575f80976024604051809a8193638ea59e1d60e01b83528860048401525af1958615610e4d57600197611c2e97611c3e575b50611bc06060611bb9611bb3866121df565b976121df565b9401612937565b90602081519101209160208151910120926040519460208601966001600160601b03199060601b16875260348601526001600160601b03199060601b1660548501526001600160801b03199060801b166068840152607883015260988201526098815261076560b882612042565b960198999199969294909661159e565b5f611c4891612042565b5f611ba1565b611c57836121df565b863b156101b257604051630959112b60e11b81526001600160a01b0390911660048201525f81602481838b5af18015610e4d57611c95575b50611b63565b5f611c9f91612042565b5f611c8f565b611cc59060203d8111611cca575b611cbd8183612042565b81019061294b565b611673565b503d611cb3565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9498509690611dc992999695600194927fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a16060611d786020838d01016122e1565b926020815191012091604051936020850195865265ffffffffffff60d01b9060d01b1660408501526040818d01013560468501528b010135606683015260868201526086815261076560a682612042565b9601929594939094611508565b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b604482015264040d0c2e6d60db1b6064820152608490fd5b61081c838787611e949460208151910120906123c2565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b346101b2575f3660031901126101b257602090600e5f80516020612b008339815191525401548152f35b9181601f840112156101b2578235916001600160401b0383116101b2576020808501948460051b0101116101b257565b600435906001600160a01b03821682036101b257565b35906001600160a01b03821682036101b257565b9181601f840112156101b2578235916001600160401b0383116101b257602083818601950101116101b257565b35906001600160801b03821682036101b257565b9060038210156107f15752565b15611fa157565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b604081019081106001600160401b03821117611a4e57604052565b606081019081106001600160401b03821117611a4e57604052565b90601f801991011681019081106001600160401b03821117611a4e57604052565b602080612090928195946040519682889351918291018585015e8201908382015203018085520183612042565b565b1561209957565b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b908060209392818452848401375f828201840152601f01601f1916010190565b9395949061212e6001600160801b0393606095859360018060a01b031688526080602089015260808801916120de565b9616604085015216910152565b90604051918281549182825260208201905f5260205f20925f5b81811061216a57505061209092500383612042565b84546001600160a01b0316835260019485019487945060209093019201612155565b6001600160401b038111611a4e5760051b60200190565b919081101561180c5760051b0190565b805182101561180c5760209160051b010190565b604051906121d48261200c565b5f6020838281520152565b356001600160a01b03811681036101b25790565b5f80516020612b0083398151915254600901905f5b8381106122185750505050600190565b612226610a148286856121a3565b6001600160a01b03165f9081526020849052604090205460ff161561224d57600101612208565b505050505f90565b3580151581036101b25790565b5f1981146104db5760010190565b6001600160a01b031680156122ce575f80516020612ae083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff811681036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b257602001918160051b360383136101b257565b919081101561180c5760051b8101359060be19813603018212156101b2570190565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019181360383136101b257565b9291926001600160401b038211611a4e57604051916123a6601f8201601f191660200184612042565b8294818452818301116101b2578281602093845f960137010152565b9190916123d1600782016128c4565b926040519060208201908152602082526123ec604083612042565b612428603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282612042565b5190205f9260095f9301925b868110156124af5761246a61246161245b6124548460051b86018661234b565b369161237d565b856129c3565b909291926129fd565b6001600160a01b03165f9081526020859052604090205460ff16612491575b600101612434565b9361249b90612262565b938585036124895750505050505050600190565b505050505050505f90565b5f80516020612ae0833981519152546001600160a01b031633036124da57565b63118cdaa760e01b5f523360045260245ffd5b905f80516020612b00833981519152549261250a84541515611f9a565b825f52600b840160205260ff60405f20541660038110156107f1576002036126fc576001600160801b03166509184e72a000016001600160801b0381116104db5760068401546040516323b872dd60e01b81523360048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af1908115610e4d575f916126dd575b5015612698576e5af43d82803e903d91602b57fd5bf360058401549160405160208101918583526040820152604081526125da606082612042565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b1617602052603760095ff5916001600160a01b038316908115612689577f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf191600d602092825f52600c810184528560405f2055016126758154612262565b9055604051908152a2906509184e72a00090565b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b6126f6915060203d602011611cca57611cbd8183612042565b5f61259f565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f6040805161276681612027565b828152826020820152015260405161277d81612027565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b9060088201908154612880579091600901905f5b81518110156127f2576001906001600160a01b036127cf82856121b3565b5116828060a01b03165f528360205260405f208260ff19825416179055016127b1565b5080519291506001600160401b038311611a4e57680100000000000000008311611a4e57815483835580841061285a575b50602001905f5260205f205f5b83811061283d5750505050565b82516001600160a01b031681830155602090920191600101612830565b825f528360205f2091820191015b8181106128755750612823565b5f8155600101612868565b606460405162461bcd60e51b815260206004820152602060248201527f72656d6f76652070726576696f75732076616c696461746f72732066697273746044820152fd5b61ffff6001820154915416908181029181830414901517156104db5761270f81018091116104db57612710900490565b905f1943014381116104db57805b61290d575b505f9150565b804083810361291e57506001925050565b156129325780156104db575f190180612902565b612907565b356001600160801b03811681036101b25790565b908160209103126101b2575180151581036101b25790565b903590601e19813603018212156101b257018035906001600160401b0382116101b2576020019160608202360383136101b257565b60ff5f80516020612b208339815191525460401c16156129b457565b631afcd79f60e31b5f5260045ffd5b81519190604183036129f3576129ec9250602082015190606060408401519301515f1a90612a5d565b9192909190565b50505f9160029190565b60048110156107f15780612a0f575050565b60018103612a265763f645eedf60e01b5f5260045ffd5b60028103612a41575063fce698f760e01b5f5260045260245ffd5b600314612a4b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612ad4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610e4d575f516001600160a01b03811615612aca57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220bcddd1e327a9db67c9f2d99da008e3ca613651edd923d75a84279688b2dc90f264736f6c634300081a0033","sourceMap":"748:15445:159:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;:::i;:::-;3496:45;-1:-1:-1;;;;;;;;;;;748:15445:159;3496:45;:57;748:15445;;;;;;-1:-1:-1;748:15445:159;;;;;;-1:-1:-1;748:15445:159;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;:::i;:::-;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;;;4301:16:26;748:15445:159;-1:-1:-1;;;;;748:15445:159;;4726:16:26;;:34;;;;748:15445:159;4805:1:26;4790:16;:50;;;;748:15445:159;4855:13:26;:30;;;;748:15445:159;4851:91:26;;;-1:-1:-1;;748:15445:159;;4805:1:26;748:15445:159;-1:-1:-1;;;;;;;;;;;748:15445:159;6961:1:26;;748:15445:159;4979:67:26;;748:15445:159;6893:76:26;;;:::i;:::-;;;:::i;:::-;6961:1;:::i;:::-;748:15445:159;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:25;;:::i;:::-;748:15445:159;16061:27;;-1:-1:-1;;748:15445:159;;;;;;;;;16042:52;748:15445;16042:52;;748:15445;;;;16042:52;;;;;;:::i;:::-;748:15445;;;;16032:63;;:89;748:15445;;-1:-1:-1;;;;;;;;;;;748:15445:159;1510:17;;:::i;:::-;748:15445;;;;4805:1:26;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;1560:53;;748:15445;;;1560:53;748:15445;;1537:20;;748:15445;;-1:-1:-1;;;;;;748:15445:159;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1623:25;;;748:15445;;-1:-1:-1;;748:15445:159;;;;;577:4:161;;;:::i;:::-;748:15445:159;;;;;;;:::i;:::-;577:4:161;;;748:15445:159;577:4:161;;;748:15445:159;577:4:161;;;748:15445:159;;577:4:161;;;;;;;;;;;1721:35:159;;;;;1766:22;1721:35;;;:::i;:::-;748:15445;;:::i;:::-;;674:18:161;748:15445:159;;;;;;:::i;:::-;447:13:161;748:15445:159;;3489:60:161;748:15445:159;1766:22;748:15445;;-1:-1:-1;;;;;;748:15445:159;;;;;5066:101:26;;748:15445:159;5066:101:26;748:15445:159;5142:14:26;748:15445:159;-1:-1:-1;;;748:15445:159;-1:-1:-1;;;;;;;;;;;748:15445:159;;-1:-1:-1;;;;;;;;;;;748:15445:159;;4805:1:26;748:15445:159;;5142:14:26;748:15445:159;577:4:161;748:15445:159;;;;;;:::i;:::-;577:4:161;;;;;;;;748:15445:159;;;;;;;;;;;;4979:67:26;-1:-1:-1;;748:15445:159;;;-1:-1:-1;;;;;;;;;;;748:15445:159;4979:67:26;;;4851:91;6498:23;;;748:15445:159;4908:23:26;748:15445:159;;4908:23:26;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:26;;4726:34;;;-1:-1:-1;4726:34:26;;748:15445:159;;;;;;-1:-1:-1;;748:15445:159;;;;2357:1:25;748:15445:159;;:::i;:::-;2303:62:25;;:::i;2357:1::-;748:15445:159;;;;;;;-1:-1:-1;;748:15445:159;;;;;;3650:28;-1:-1:-1;;;;;;;;;;;748:15445:159;3650:28;748:15445;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;4059:56;4086:28;-1:-1:-1;;;;;;;;;;;748:15445:159;4086:28;4059:56;:::i;:::-;748:15445;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;3922:39;-1:-1:-1;;;;;;;;;;;748:15445:159;3922:39;748:15445;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;748:15445:159;;7928:107;748:15445;;7936:38;;7928:107;:::i;:::-;8264:19;;;;748:15445;;;8140:3;8111:27;;;;;;748:15445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8264:82;748:15445;;;8452:20;3348::161;8452::159;8842:76;8452:20;;;;;:::i;:::-;;;;748:15445;;;;;;;;;8539:24;748:15445;;;;;;;;8581:39;;;:41;748:15445;;8581:41;:::i;:::-;748:15445;;8448:279;8782:20;;;:::i;:::-;748:15445;;8746:57;748:15445;;;;;;8746:57;3348:20:161;:::i;:::-;748:15445:159;;3312:57:161;748:15445:159;3312:57:161;;748:15445:159;;;;;;;;;;;;3312:57:161;;;;;;:::i;:::-;748:15445:159;3302:68:161;;8842:76:159;;:::i;:::-;8140:3;748:15445;8096:13;;;8448:279;748:15445;;;;;;;;;;;;;;;;8448:279;;748:15445;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;;;8111:27;;8960:78;8111:27;;8939:155;8111:27;748:15445;;;;;8992:32;8960:78;;:::i;:::-;8939:155;:::i;748:15445::-;;;;;;-1:-1:-1;;748:15445:159;;;;-1:-1:-1;;;;;;;;;;;748:15445:159;;2774:23;748:15445;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;3796:39;-1:-1:-1;;;;;;;;;;;748:15445:159;3796:39;748:15445;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;-1:-1:-1;748:15445:159;;;;;;;;;3796:39;748:15445;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;2657:30;-1:-1:-1;;;;;;;;;;;748:15445:159;2657:30;748:15445;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;4354:22;-1:-1:-1;;;;;;;;;;;748:15445:159;4354:22;748:15445;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;748:15445:159;;;;5227:28;748:15445;5227:28;;5154:129;5174:23;;;;;;748:15445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;748:15445:159;;;;;;;;;5227:28;748:15445;;;5199:3;5256:15;;;5227:28;5256:15;;;;:::i;:::-;;:::i;:::-;748:15445;;;;;;-1:-1:-1;748:15445:159;;;;;-1:-1:-1;748:15445:159;;5218:54;;;;:::i;:::-;748:15445;;5159:13;;748:15445;;;;;;-1:-1:-1;;748:15445:159;;;;;5388:36;-1:-1:-1;;;;;;;;;;;748:15445:159;5388:36;748:15445;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;:::i;:::-;4878:31;-1:-1:-1;;;;;;;;;;;748:15445:159;4878:31;:43;748:15445;;;;;;-1:-1:-1;748:15445:159;;;;;-1:-1:-1;748:15445:159;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;-1:-1:-1;;;;;;;;;;;748:15445:159;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;;;5939:26;;;748:15445;;5929:37;5985:25;;;748:15445;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;-1:-1:-1;;;;;;;;;;;748:15445:159;3009:35;;748:15445;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;:::i;:::-;;;4226:25;-1:-1:-1;;;;;;;;;;;748:15445:159;4226:25;-1:-1:-1;;;;;748:15445:159;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;748:15445:159;;;;4705:19;748:15445;4705:19;;4635:120;4655:20;;;;;;748:15445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;4677:3;4731:12;;;;;:::i;:::-;748:15445;;;;;;;;;;;;4696:48;;;;;:::i;:::-;748:15445;;;;;;;;;;;4640:13;;748:15445;;;;;;-1:-1:-1;;748:15445:159;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;6975:52;748:15445;;;;;6975:52;:::i;:::-;-1:-1:-1;;;;;748:15445:159;;;;;;;7038:77;;;;;;748:15445;;;;;;;;;;;;7038:77;;7067:10;748:15445;7038:77;;;:::i;:::-;;;;;;;;;;;;748:15445;7038:77;;;748:15445;;;;;;;;7038:77;748:15445;7038:77;;;:::i;:::-;;;;;748:15445;;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15445:159;;-1:-1:-1;;;;;;748:15445:159;;;;;;;-1:-1:-1;;;;;748:15445:159;3975:40:25;748:15445:159;;3975:40:25;748:15445:159;;;;;;;-1:-1:-1;;748:15445:159;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;;;6431:44:26;;;;748:15445:159;6427:105:26;;-1:-1:-1;;748:15445:159;;;-1:-1:-1;;;;;;;;;;;748:15445:159;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:25;;:::i;:::-;748:15445:159;16061:27;;-1:-1:-1;;748:15445:159;;;;;;;;6656:20:26;748:15445:159;2405:25;748:15445;;;;;16042:52;;;;748:15445;;;16042:52;;;;;;;:::i;:::-;748:15445;;;;16032:63;;:89;748:15445;;-1:-1:-1;;;;;;;;;;;748:15445:159;2078:17;;:::i;:::-;748:15445;;;;6593:4:26;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:23;;748:15445;2105:23;;748:15445;;;;;;;2235:28;;748:15445;2235:28;;;748:15445;;2235:28;2165;;748:15445;;;;;;;;;2300:66;748:15445;2326:39;;;748:15445;:::i;:::-;2300:66;;:::i;:::-;2405:25;2377;;748:15445;;;;;;;;;-1:-1:-1;;;748:15445:159;-1:-1:-1;;;;;;;;;;;748:15445:159;;-1:-1:-1;;;;;;;;;;;748:15445:159;;1892:1;748:15445;;6656:20:26;748:15445:159;;;-1:-1:-1;;;;;748:15445:159;-1:-1:-1;;;;;748:15445:159;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;-1:-1:-1;;;;;;;748:15445:159;;;;;;;-1:-1:-1;;;;;;;748:15445:159;;;;;;;;;;;;;-1:-1:-1;;;;;;748:15445:159;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6431:44:26;748:15445:159;1892:1;-1:-1:-1;;;;;748:15445:159;;6450:25:26;;6431:44;;748:15445:159;;;;;;-1:-1:-1;;748:15445:159;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;7412:52;;;;;:::i;:::-;748:15445;;;;;;;;;;;7580:32;748:15445;7580:32;;748:15445;;;;;;;;7580:32;;;748:15445;7580:32;;:::i;:::-;748:15445;7570:43;;7527:87;;;;;748:15445;;-1:-1:-1;;;7527:87:159;;-1:-1:-1;;;;;748:15445:159;;;;7527:87;;748:15445;;;;;-1:-1:-1;748:15445:159;;;-1:-1:-1;7527:87:159;;;;;;;;;748:15445;7625:75;;;;;;;748:15445;;;;;;;;;;;;7625:75;;7652:10;748:15445;7625:75;;;:::i;7527:87::-;748:15445;7527:87;;;:::i;:::-;;;;748:15445;;;;;;-1:-1:-1;;748:15445:159;;;;-1:-1:-1;;;;;;;;;;;748:15445:159;2891:35;;748:15445;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;748:15445:159;;5657:23;748:15445;;-1:-1:-1;;;;;;748:15445:159;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;;;;;;;;;;;-1:-1:-1;;748:15445:159;;;;;;;;6228:16;;;;;:36;;748:15445;;;;6482:19;-1:-1:-1;;;;;;;;;;;748:15445:159;6343:107;748:15445;;6351:38;;6343:107;:::i;:::-;6482:19;748:15445;;;;;;;;;;;;;;;;;;;;;6717:45;748:15445;;;;;;;;;;;6667:34;748:15445;;;;;;;;;;;;;;;;;6717:45;748:15445;;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;6228:36;6248:11;748:15445;6248:11;:16;;6228:36;;748:15445;;;;;;-1:-1:-1;;748:15445:159;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;:::i;:::-;7368:53:64;;;516:66:62;7368:53:64;1292:93:62;;7628:52:64;;;1503:4:62;516:66;7628:52:64;-1:-1:-1;;;;;;;;;;;748:15445:159;;9306:107;748:15445;;9314:38;;9306:107;:::i;:::-;748:15445;;;9520:3;9490:28;;;;;;748:15445;;;;;;;;;;;;;;;;;;11268:27;;;748:15445;;;;;11304:39;748:15445;11268:75;748:15445;;11425:58;748:15445;;;;11449:33;748:15445;11425:58;:::i;:::-;748:15445;;;;;;;;;;;11743:26;748:15445;;;;11743:26;;:::i;:::-;748:15445;;;;;;;:::i;:::-;;;;;11696:74;;;;748:15445;11268:27;;;;748:15445;;;;;;;;;;;;;;11827:13;748:15445;11822:273;11883:3;11846:28;748:15445;;;11846:28;;;;;:::i;:::-;11842:39;;;;;;;11950:31;748:15445;11950:28;748:15445;;;11846:28;;;;11950;:::i;:::-;:31;;:::i;:::-;748:15445;-1:-1:-1;;;;;;;;;;;748:15445:159;12636:24;;;:::i;:::-;-1:-1:-1;;;;;748:15445:159;;;;;12607:28;;;748:15445;;;;;;12607:59;748:15445;;12795:32;;748:15445;-1:-1:-1;;;;;748:15445:159;;;-1:-1:-1;;;;;748:15445:159;;12864:24;748:15445;12890:31;748:15445;12864:24;;;:::i;:::-;12890:31;;;:::i;:::-;748:15445;;-1:-1:-1;;;12838:84:159;;-1:-1:-1;;;;;748:15445:159;;;;12838:84;;748:15445;;;;;;;;;;;;;;-1:-1:-1;12838:84:159;;;;;;;;11883:3;-1:-1:-1;;;;;;12963:24:159;;;:::i;:::-;748:15445;;;;;13100:3;13063:28;11846;13063;;;;:::i;:::-;13059:39;;;;;;;13152:28;11846;13063;;13152;;:::i;:::-;748:15445;;;;;;;;;;;;;;;;13240:17;748:15445;13240:17;;;;;;:::i;:::-;13259:11;748:15445;13259:11;;;;;;:::i;:::-;13198:73;;;;;748:15445;;-1:-1:-1;;;13198:73:159;;748:15445;13198:73;;748:15445;;;-1:-1:-1;;;;;748:15445:159;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;13198:73;;748:15445;;;;13198:73;;;;;;;748:15445;13198:73;;;13100:3;748:15445;;;;;;;;;;;;1503:4:62;748:15445:159;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;5709:65:161;;;748:15445:159;;;;;;;;-1:-1:-1;;748:15445:159;;;;;11846:28;748:15445;-1:-1:-1;;748:15445:159;;;;;;5709:65:161;;;13198:73:159;748:15445;5709:65:161;:::i;:::-;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5709:65:161;;748:15445:159;;;;;;:::i;:::-;13100:3;748:15445;13044:13;;;13198:73;748:15445;13198:73;;;:::i;:::-;;;;748:15445;;;;;;;;;;;;13059:39;;;;;;;;;;;;;;;748:15445;13428:13;748:15445;13423:687;13481:3;13447:25;;;;;;:::i;:::-;13443:36;;;;;;;13447:25;;13532:28;13447:25;;;;13532;13447;;13532;;:::i;:28::-;13579:20;11846:28;13579:20;;748:15445;13579:28;;;13575:438;13579:28;;;13663:19;748:15445;13663:19;;;:::i;:::-;13684:15;748:15445;13684:15;;;;:::i;:::-;13701:13;;;748:15445;13701:13;;;:::i;:::-;13627:88;;;;;;748:15445;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;13627:88;;748:15445;;13627:88;;748:15445;;;;;;;;;;;11846:28;748:15445;;;;;;;;;:::i;:::-;;;13198:73;748:15445;;;13627:88;;;;;;;;;;13575:438;;;748:15445;;;;;;;;;;;;13447:25;748:15445;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;748:15445:159;;;;13447:25;748:15445;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;748:15445:159;;;;;;;14044:55;748:15445;;;;1503:4:62;748:15445:159;;3679:243:161;748:15445:159;;;;;;11846:28;748:15445;;;;;;3778:15:161;;577:4;;748:15445:159;;;;;;;;;;;;;3679:243:161;;;;;;748:15445:159;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;11846:28;748:15445;;;;;;13198:73;748:15445;;;;;;;3679:243:161;;;;;;;;;;:::i;14044:55:159:-;13481:3;748:15445;13428:13;;;748:15445;;;;;;;;;;;;13627:88;748:15445;13627:88;;;:::i;:::-;;;;13575:438;13797:19;748:15445;13797:19;;;:::i;:::-;13838:15;;748:15445;13838:15;;;;:::i;:::-;13875:13;;748:15445;13875:13;;;:::i;:::-;13955:25;13447;13955;;748:15445;;;;;;;;;;;13754:244;;;;;748:15445;;-1:-1:-1;;;13754:244:159;;-1:-1:-1;;;;;748:15445:159;;;;13754:244;;748:15445;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;:::i;:::-;;;;;;;;13198:73;748:15445;;;;;;;13754:244;;;;;;;;;;13575:438;;;;13754:244;748:15445;13754:244;;;:::i;:::-;;;;13443:36;;;;;;;;;;;;;;;;;;;748:15445;14124:26;;748:15445;;;;;;14124:26;;;:::i;:::-;748:15445;14120:123;;13423:687;748:15445;14277:29;;748:15445;14253:54;;;;;;748:15445;;;;;;;;;;;;;14253:54;;;748:15445;14253:54;;748:15445;14253:54;;;;;;;1503:4:62;14253:54:159;12016:68;14253:54;;;13423:687;14363:24;14484:31;748:15445;14444:26;14363:24;;;:::i;:::-;14444:26;;:::i;:::-;12890:31;;14484;:::i;:::-;748:15445;;;;;;14529:27;748:15445;;;;;;14570:25;748:15445;;;4408:101:161;748:15445:159;4408:101:161;;748:15445:159;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;11846:28;748:15445;;;;;;;;;;;;;;;4408:101:161;;;;;;:::i;12016:68:159:-;11883:3;748:15445;11827:13;;;;;;;;;;;14253:54;748:15445;14253:54;;;:::i;:::-;;;;14120:123;14205:26;;;:::i;:::-;14180:52;;;;;748:15445;;-1:-1:-1;;;14180:52:159;;-1:-1:-1;;;;;748:15445:159;;;;14180:52;;748:15445;-1:-1:-1;748:15445:159;;;-1:-1:-1;14180:52:159;;;;;;;;;14120:123;;;;14180:52;748:15445;14180:52;;;:::i;:::-;;;;12838:84;;;748:15445;12838:84;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;748:15445;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;13198:73:159;748:15445;;;;;;11842:39;;;;;;9646:75;11842:39;;;;1503:4:62;11842:39:159;;12110:37;748:15445;;;;;;12110:37;748:15445;12238:26;748:15445;;;;11743:26;12238;:::i;:::-;748:15445;;;;;;12378:28;748:15445;;;2718:98:161;748:15445:159;2718:98:161;;748:15445:159;;;;;;;;;;;;;;;;;;11304:39;748:15445;;;;;;;11449:33;748:15445;;;;;;;;;;2718:98:161;;;;;;:::i;9646:75:159:-;9520:3;748:15445;9475:13;;;;;;;;748:15445;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;13198:73:159;748:15445;;;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;13198:73:159;748:15445;;;;;;9490:28;9763:79;9490:28;;;9742:156;9490:28;748:15445;;;;;9795:33;9763:79;;:::i;9742:156::-;748:15445;516:66:62;7628:52:64;748:15445:159;1292:93:62;1344:30;;;748:15445:159;1344:30:62;748:15445:159;;1344:30:62;748:15445:159;;;;;;-1:-1:-1;;748:15445:159;;;;;;5515:42;-1:-1:-1;;;;;;;;;;;748:15445:159;5515:42;748:15445;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;748:15445:159;;;;;;:::o;:::-;;;-1:-1:-1;;;;;748:15445:159;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;748:15445:159;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;:::o;:::-;;;5709:65:161;;748:15445:159;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;748:15445:159;;;;;;;;-1:-1:-1;;748:15445:159;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;748:15445:159;;-1:-1:-1;748:15445:159;;-1:-1:-1;748:15445:159;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;-1:-1:-1;748:15445:159;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;748:15445:159;;;;;;;:::o;:::-;;-1:-1:-1;;;;;748:15445:159;;;;;;;:::o;3057:348::-;-1:-1:-1;;;;;;;;;;;748:15445:159;3262:42;;;748:15445;3214:22;;;;;;3387:11;;;;748:15445;3057:348;:::o;3238:3::-;3305:14;;;;;;:::i;:::-;-1:-1:-1;;;;;748:15445:159;-1:-1:-1;748:15445:159;;;;;;;;;;;;;3261:59;3257:110;;748:15445;;3199:13;;3257:110;3340:12;;;;748:15445;3340:12;:::o;748:15445::-;;;;;;;;;;:::o;:::-;-1:-1:-1;;748:15445:159;;;;;;;:::o;3405:215:25:-;-1:-1:-1;;;;;748:15445:159;3489:22:25;;3485:91;;-1:-1:-1;;;;;;;;;;;748:15445:159;;-1:-1:-1;;;;;;748:15445:159;;;;;;;-1:-1:-1;;;;;748:15445:159;3975:40:25;-1:-1:-1;;3975:40:25;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;748:15445:159;;3509:1:25;3534:31;748:15445:159;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;5709:65:161;748:15445:159;;-1:-1:-1;;748:15445:159;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;748:15445:159;;;;;;:::o;4532:793:161:-;;;;4728:48;4750:25;;;4728:48;:::i;:::-;748:15445:159;;;4851:27:161;;;;748:15445:159;;;4851:27:161;;;;748:15445:159;4851:27:161;;:::i;:::-;2858:45:68;748:15445:159;;;2858:45:68;;4851:27:161;2858:45:68;;748:15445:159;;;;;;4813:4:161;748:15445:159;;;;;;;;;;;;;;;;;;;;2858:45:68;;5709:65:161;;2858:45:68;;;;;;:::i;:::-;748:15445:159;2848:56:68;;748:15445:159;4932:13:161;5111:42;748:15445:159;5111:42:161;;4927:369;4971:3;4947:22;;;;;;3915:8:66;3859:27;748:15445:159;;;;;;;;;:::i;:::-;;;;:::i;:::-;3859:27:66;;:::i;:::-;3915:8;;;;;:::i;:::-;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;5107:179:161;;4971:3;748:15445:159;;4932:13:161;;5107:179;5188:17;;;;:::i;:::-;:30;;;;5107:179;5184:88;5242:11;;;;;;;748:15445:159;5242:11:161;:::o;4947:22::-;;;;;;;;748:15445:159;4532:793:161;:::o;2658:162:25:-;-1:-1:-1;;;;;;;;;;;748:15445:159;-1:-1:-1;;;;;748:15445:159;966:10:30;2717:23:25;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:25;966:10:30;2763:40:25;748:15445:159;;-1:-1:-1;2763:40:25;9947:1144:159;;-1:-1:-1;;;;;;;;;;;748:15445:159;;10142:107;748:15445;;10150:38;;10142:107;:::i;:::-;748:15445;-1:-1:-1;748:15445:159;10281:19;;;748:15445;;;;-1:-1:-1;748:15445:159;;;;;;;;;10319:24;10281:62;748:15445;;-1:-1:-1;;;;;748:15445:159;10513:18;748:15445;-1:-1:-1;;;;;748:15445:159;;;;14722:32;;;748:15445;;;-1:-1:-1;;;14715:88:159;;14769:10;14722:20;14715:88;;748:15445;14789:4;748:15445;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;14715:88;;748:15445;;-1:-1:-1;;;;;;;748:15445:159;14715:88;;;;;;;-1:-1:-1;14715:88:159;;;9947:1144;748:15445;;;;3743:569:44;10809:32:159;;;748:15445;;;;;10853:32;;748:15445;;;;;;;;;10853:32;;;748:15445;10853:32;;:::i;:::-;748:15445;10843:43;;3743:569:44;;;;;;;;-1:-1:-1;3743:569:44;;;;;;;;748:15445:159;3743:569:44;;;-1:-1:-1;3743:569:44;748:15445:159;-1:-1:-1;;;;;748:15445:159;;;4325:22:44;;4321:85;;11006:32:159;10898:37;10955:33;748:15445;10898:37;748:15445;-1:-1:-1;748:15445:159;10898:28;;;748:15445;;;;-1:-1:-1;748:15445:159;;10955:33;:35;748:15445;;10955:35;:::i;:::-;748:15445;;;;;;;11006:32;11049:35;10513:18;9947:1144;:::o;4321:85:44:-;4370:25;;;-1:-1:-1;4370:25:44;14722:20:159;-1:-1:-1;4370:25:44;748:15445:159;;;-1:-1:-1;;;748:15445:159;;;14722:20;748:15445;;;;;;;;;;;;;14715:88;;748:15445;14715:88;;;;748:15445;14715:88;748:15445;14715:88;;;;;;;:::i;:::-;;;;748:15445;;;-1:-1:-1;;;748:15445:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;748:15445:159;;;;;;;3945:169:161;-1:-1:-1;748:15445:159;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;748:15445:159;;;4068:12:161;748:15445:159;;4032:75:161;;748:15445:159;;4090:15:161;748:15445:159;;4032:75:161;;748:15445:159;3945:169:161;:::o;14871:406:159:-;;14975:36;;;748:15445;;;;;15076:13;;15134:42;;;15022:1;15115:3;748:15445;;15091:22;;;;;14975:36;;-1:-1:-1;;;;;15177:14:159;748:15445;15177:14;;:::i;:::-;748:15445;;;;;;;;-1:-1:-1;748:15445:159;;;;;-1:-1:-1;748:15445:159;;;;;;;;;;;15076:13;;15091:22;-1:-1:-1;748:15445:159;;;15091:22;-1:-1:-1;;;;;;748:15445:159;;;;;;;;;;;;;;;;;;;15071:139;748:15445;;;;15022:1;748:15445;;15022:1;748:15445;15022:1;748:15445;;;;;;14871:406;;;;:::o;748:15445::-;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;14975:36;748:15445;;;;;15022:1;748:15445;;;15022:1;748:15445;;;;;;;;;;;;;;;;15022:1;748:15445;;14975:36;748:15445;;;;;;;;;;;;;;;;;;;;;;;;;;;;5331:268:161;748:15445:159;5503:19:161;;;748:15445:159;;;;;;;;;;;;;;;;;;;5579:4:161;748:15445:159;;;;;;;5587:5:161;748:15445:159;;5331:268:161;:::o;2839:340::-;;748:15445:159;;2937:12:161;748:15445:159;2937:12:161;748:15445:159;;;;2920:230:161;2955:5;;;2920:230;-1:-1:-1;748:15445:159;;-1:-1:-1;2839:340:161:o;2962:3::-;2995:12;;3025:11;;;;;-1:-1:-1;2952:1:161;;-1:-1:-1;;3056:11:161:o;3021:119::-;3092:8;3088:52;;748:15445:159;;;;-1:-1:-1;;748:15445:159;;2925:28:161;;3088:52;3120:5;;748:15445:159;;-1:-1:-1;;;;;748:15445:159;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;748:15445:159;;;;;;;;;;;;;;;;:::o;7084:141:26:-;748:15445:159;-1:-1:-1;;;;;;;;;;;748:15445:159;;;;7150:18:26;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:26;;-1:-1:-1;7191:17:26;2129:766:66;748:15445:159;;;2129:766:66;2276:2;2256:22;;2276:2;;2739:25;2539:180;;;;;;;;;;;;;;;-1:-1:-1;2539:180:66;2739:25;;:::i;:::-;2732:32;;;;;:::o;2252:637::-;2795:83;;2811:1;2795:83;2815:35;2795:83;;:::o;7196:532::-;748:15445:159;;;;;;7282:29:66;;;7327:7;;:::o;7278:444::-;748:15445:159;7378:38:66;;748:15445:159;;7439:23:66;;;7291:20;7439:23;748:15445:159;7291:20:66;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;748:15445:159;;;7291:20:66;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;748:15445:159;;;7291:20:66;7679:32;5140:1530;;;6199:66;6186:79;;6182:164;;748:15445:159;;;;;;-1:-1:-1;748:15445:159;;;;;;;;;;;;;;;;;;;6457:24:66;;;;;;;;;-1:-1:-1;6457:24:66;-1:-1:-1;;;;;748:15445:159;;6495:20:66;6491:113;;6614:49;-1:-1:-1;6614:49:66;-1:-1:-1;5140:1530:66;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:66;6457:24;6531:62;-1:-1:-1;6531:62:66;:::o;6182:164::-;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o","linkReferences":{}},"methodIdentifiers":{"areValidators(address[])":"8f381dbe","codeState(bytes32)":"c13911e8","codesStates(bytes32[])":"82bdeaad","commitBlocks((bytes32,uint48,bytes32,bytes32,(address,bytes32,address,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"01b1d156","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","computeSettings()":"84d22a4f","createProgram(bytes32,bytes32,bytes,uint128)":"8074b455","createProgramWithDecoder(address,bytes32,bytes32,bytes,uint128)":"666d124c","genesisBlockHash()":"28e24b3d","initialize(address,address,address,address,address[])":"f8453e7c","isValidator(address)":"facd743b","latestCommittedBlockHash()":"c9f16a11","lookupGenesisHash()":"8b1edf1e","mirrorImpl()":"e6fabc09","mirrorProxyImpl()":"65ecfea2","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCodeIds(address[])":"baaf0201","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setMirror(address)":"3d43b418","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","validatedCodesCount()":"007a32e7","validators()":"ca1e7819","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"name\":\"ComputationSettingsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ValidatorsChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"areValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_codesIds\",\"type\":\"bytes32[]\"}],\"name\":\"codesStates\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes32\",\"name\":\"previousCommittedBlock\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predecessorBlock\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.BlockCommitment[]\",\"name\":\"_blockCommitments\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.CodeCommitment[]\",\"name\":\"_codeCommitments\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeSettings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ComputationSettings\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_decoderImpl\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgramWithDecoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestCommittedBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lookupGenesisHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxyImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_programId\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_programsIds\",\"type\":\"address[]\"}],\"name\":\"programsCodeIds\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newMirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BlockCommitted(bytes32)\":{\"details\":\"This is an *informational* event, signaling that the block outcome has been committed.\",\"params\":{\"hash\":\"The block hash that was \\\"finalized\\\" in relation to the necessary transitions.\"}},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"This is an *informational* event, signaling the results of code validation.\",\"params\":{\"codeId\":\"The ID of the code that was validated.\",\"valid\":\"The result of the validation: indicates whether the code ID can be used for program creation.\"}},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"This is a *requesting* event, signaling that validators need to download and validate the code from the transaction blob.\",\"params\":{\"blobTxHash\":\"The transaction hash that contains the WASM blob. Set to zero if applied to the current transaction.\",\"codeId\":\"The expected code ID of the applied WASM blob, represented as a Blake2 hash.\"}},\"ComputationSettingsChanged(uint64,uint128)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to change the computation settings. Users and program authors may want to adjust their practices, while validators need to apply the changes internally starting from the next block.\",\"params\":{\"threshold\":\"The amount of Gear gas initially allocated for free to allow the program to decide if it wants to process the incoming message.\",\"wvaraPerSecond\":\"The amount of WVara to be charged from the program's execution balance per second of computation.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling the creation of a new program and its Ethereum mirror. Validators need to initialize it with a zeroed hash state internally.\",\"params\":{\"actorId\":\"ID of the actor that was created. It is accessible inside the co-processor and on Ethereum by this identifier.\",\"codeId\":\"The code ID of the WASM implementation of the created program.\"}},\"StorageSlotChanged()\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to wipe the router state, rendering all previously existing codes and programs ineligible. Validators need to wipe their databases immediately.\"},\"ValidatorsChanged()\":{\"details\":\"This is an *informational* event, signaling that only new validators are now able to pass commitment signing verification.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"BlockCommitted(bytes32)\":{\"notice\":\"Emitted when all necessary state transitions have been applied and states have changed.\"},\"CodeGotValidated(bytes32,bool)\":{\"notice\":\"Emitted when a code, previously requested for validation, receives validation results, so its CodeStatus changed.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"notice\":\"Emitted when a new code validation request is submitted.\"},\"ComputationSettingsChanged(uint64,uint128)\":{\"notice\":\"Emitted when the computation settings have been changed.\"},\"ProgramCreated(address,bytes32)\":{\"notice\":\"Emitted when a new program within the co-processor is created and is now available on-chain.\"},\"StorageSlotChanged()\":{\"notice\":\"Emitted when the router's storage slot has been changed.\"},\"ValidatorsChanged()\":{\"notice\":\"Emitted when the election mechanism forces the validator set to be changed.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58\",\"dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601\",\"dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L\"]},\"src/IRouter.sol\":{\"keccak256\":\"0xdbae96165e93f374f6b0ab185c3ce61e5eed76cce317349eda4aab002f3998c7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://275140952f5612b545caf34e66af939a42a6156ddf9ae312192e9dd3010c8be2\",\"dweb:/ipfs/QmZYtSdHt5GkL5GT4gqNsuoryZ1whB1AQfmSmoNCHhicQc\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0x6d1ecf1d12375db23f5ab62e056db909ac6f9228c51290d6f07f02716bc6a8b1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://651fa324ba3f3d38ad586d00d1013dc6ea2c665aede89f219aa1fce2c78a0f7c\",\"dweb:/ipfs/QmXChwu9A6exCac6UAgijYrc7PErYcoh9LKbzj7obWe6hf\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xa543913342b4408d07fe4d884280b5c1d2430e8386713e9b6e1a5924e3e2bfbc\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9e466d986795dab2d942984fcbf03e8e8995cd17e4221f1dfca715af091d03ec\",\"dweb:/ipfs/QmWo16RoqKERSYornA8qPqL32rYveeEHxiHmDHongS6uzy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"threshold","type":"uint64","indexed":false},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128","indexed":false}],"type":"event","name":"ComputationSettingsChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[],"type":"event","name":"ValidatorsChanged","anonymous":false},{"inputs":[{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"view","type":"function","name":"areValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum Gear.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32[]","name":"_codesIds","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"codesStates","outputs":[{"internalType":"enum Gear.CodeState[]","name":"","type":"uint8[]"}]},{"inputs":[{"internalType":"struct Gear.BlockCommitment[]","name":"_blockCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"bytes32","name":"previousCommittedBlock","type":"bytes32"},{"internalType":"bytes32","name":"predecessorBlock","type":"bytes32"},{"internalType":"struct Gear.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct Gear.CodeCommitment[]","name":"_codeCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[],"stateMutability":"view","type":"function","name":"computeSettings","outputs":[{"internalType":"struct Gear.ComputationSettings","name":"","type":"tuple","components":[{"internalType":"uint64","name":"threshold","type":"uint64"},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128"}]}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_decoderImpl","type":"address"},{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"createProgramWithDecoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestCommittedBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lookupGenesisHash"},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxyImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_programId","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address[]","name":"_programsIds","type":"address[]"}],"stateMutability":"view","type":"function","name":"programsCodeIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"address","name":"newMirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9","urls":["bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58","dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x78105f388516b83fcb68f7c006c5d9d685bc8ad7fadcdfa56c0919efa79a6373","urls":["bzz-raw://3a8ab1264895b4f5c8fd3aa18524016c4e88712a50e0a9935f421e13f3e09601","dweb:/ipfs/QmXyVe9k37fDFWmrfjYHisxmqnEynevYo88uVrnRAmYW6L"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0xdbae96165e93f374f6b0ab185c3ce61e5eed76cce317349eda4aab002f3998c7","urls":["bzz-raw://275140952f5612b545caf34e66af939a42a6156ddf9ae312192e9dd3010c8be2","dweb:/ipfs/QmZYtSdHt5GkL5GT4gqNsuoryZ1whB1AQfmSmoNCHhicQc"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x6d1ecf1d12375db23f5ab62e056db909ac6f9228c51290d6f07f02716bc6a8b1","urls":["bzz-raw://651fa324ba3f3d38ad586d00d1013dc6ea2c665aede89f219aa1fce2c78a0f7c","dweb:/ipfs/QmXChwu9A6exCac6UAgijYrc7PErYcoh9LKbzj7obWe6hf"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xa543913342b4408d07fe4d884280b5c1d2430e8386713e9b6e1a5924e3e2bfbc","urls":["bzz-raw://9e466d986795dab2d942984fcbf03e8e8995cd17e4221f1dfca715af091d03ec","dweb:/ipfs/QmWo16RoqKERSYornA8qPqL32rYveeEHxiHmDHongS6uzy"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":76828,"exportedSymbols":{"Clones":[41840],"Gear":[77378],"IERC20":[43140],"IERC20Metadata":[43166],"IMirror":[73603],"IRouter":[73896],"IWrappedVara":[73907],"OwnableUpgradeable":[39387],"ReentrancyGuardTransient":[44045],"Router":[76827],"StorageSlot":[44581]},"nodeType":"SourceUnit","src":"39:16155:159","nodes":[{"id":75261,"nodeType":"PragmaDirective","src":"39:24:159","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":75263,"nodeType":"ImportDirective","src":"65:74:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":44582,"symbolAliases":[{"foreign":{"id":75262,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"73:11:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75265,"nodeType":"ImportDirective","src":"140:101:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":39388,"symbolAliases":[{"foreign":{"id":75264,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39387,"src":"148:18:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75267,"nodeType":"ImportDirective","src":"242:64:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":41841,"symbolAliases":[{"foreign":{"id":75266,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"250:6:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75269,"nodeType":"ImportDirective","src":"307:100:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":44046,"symbolAliases":[{"foreign":{"id":75268,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44045,"src":"315:24:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75271,"nodeType":"ImportDirective","src":"408:38:159","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":73897,"symbolAliases":[{"foreign":{"id":75270,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73896,"src":"416:7:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75273,"nodeType":"ImportDirective","src":"447:38:159","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":73604,"symbolAliases":[{"foreign":{"id":75272,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"455:7:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75275,"nodeType":"ImportDirective","src":"486:48:159","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":73908,"symbolAliases":[{"foreign":{"id":75274,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"494:12:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75277,"nodeType":"ImportDirective","src":"535:70:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":43141,"symbolAliases":[{"foreign":{"id":75276,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43140,"src":"543:6:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75279,"nodeType":"ImportDirective","src":"606:97:159","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":43167,"symbolAliases":[{"foreign":{"id":75278,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43166,"src":"614:14:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":75281,"nodeType":"ImportDirective","src":"704:42:159","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":76828,"sourceUnit":77379,"symbolAliases":[{"foreign":{"id":75280,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"712:4:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76827,"nodeType":"ContractDefinition","src":"748:15445:159","nodes":[{"id":75290,"nodeType":"VariableDeclaration","src":"929:106:159","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"954:12:159","scope":76827,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75288,"name":"bytes32","nodeType":"ElementaryTypeName","src":"929:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":75289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"969:66:159","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":75298,"nodeType":"FunctionDefinition","src":"1095:53:159","nodes":[],"body":{"id":75297,"nodeType":"Block","src":"1109:39:159","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75294,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39609,"src":"1119:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":75295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1119:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75296,"nodeType":"ExpressionStatement","src":"1119:22:159"}]},"documentation":{"id":75291,"nodeType":"StructuredDocumentation","src":"1042:48:159","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":75292,"nodeType":"ParameterList","parameters":[],"src":"1106:2:159"},"returnParameters":{"id":75293,"nodeType":"ParameterList","parameters":[],"src":"1109:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75370,"nodeType":"FunctionDefinition","src":"1154:677:159","nodes":[],"body":{"id":75369,"nodeType":"Block","src":"1348:483:159","nodes":[],"statements":[{"expression":{"arguments":[{"id":75315,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75300,"src":"1373:6:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75314,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39247,"src":"1358:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":75316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1358:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75317,"nodeType":"ExpressionStatement","src":"1358:22:159"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":75319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1407:25:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":75318,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76826,"src":"1391:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":75320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1391:42:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75321,"nodeType":"ExpressionStatement","src":"1391:42:159"},{"assignments":[75324],"declarations":[{"constant":false,"id":75324,"mutability":"mutable","name":"router","nameLocation":"1459:6:159","nodeType":"VariableDeclaration","scope":75369,"src":"1443:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75323,"nodeType":"UserDefinedTypeName","pathNode":{"id":75322,"name":"Storage","nameLocations":["1443:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"1443:7:159"},"referencedDeclaration":73677,"src":"1443:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75327,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75325,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"1468:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1468:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1443:34:159"},{"expression":{"id":75334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75328,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1488:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75330,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1495:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"1488:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":75331,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1510:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1515:10:159","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":77223,"src":"1510:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$77003_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":75333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1510:17:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"1488:39:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75335,"nodeType":"ExpressionStatement","src":"1488:39:159"},{"expression":{"id":75345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75336,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1537:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1544:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"1537:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":75341,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75302,"src":"1577:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75342,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75304,"src":"1586:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75343,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75306,"src":"1600:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":75339,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1560:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1565:11:159","memberName":"AddressBook","nodeType":"MemberAccess","referencedDeclaration":76964,"src":"1560:16:159","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddressBook_$76964_storage_ptr_$","typeString":"type(struct Gear.AddressBook storage pointer)"}},"id":75344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1560:53:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_memory_ptr","typeString":"struct Gear.AddressBook memory"}},"src":"1537:76:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75346,"nodeType":"ExpressionStatement","src":"1537:76:159"},{"expression":{"id":75354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":75347,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1623:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1630:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"1623:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1649:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"1623:52:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75352,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1678:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1683:28:159","memberName":"SIGNING_THRESHOLD_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":76954,"src":"1678:33:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1623:88:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":75355,"nodeType":"ExpressionStatement","src":"1623:88:159"},{"expression":{"arguments":[{"id":75357,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1736:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":75358,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75309,"src":"1744:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":75356,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76718,"src":"1721:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (struct IRouter.Storage storage pointer,address[] memory)"}},"id":75359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1721:35:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75360,"nodeType":"ExpressionStatement","src":"1721:35:159"},{"expression":{"id":75367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75361,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75324,"src":"1766:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1773:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"1766:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":75364,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"1791:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1796:26:159","memberName":"defaultComputationSettings","nodeType":"MemberAccess","referencedDeclaration":77170,"src":"1791:31:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ComputationSettings_$76996_memory_ptr_$","typeString":"function () pure returns (struct Gear.ComputationSettings memory)"}},"id":75366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1791:33:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_memory_ptr","typeString":"struct Gear.ComputationSettings memory"}},"src":"1766:58:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":75368,"nodeType":"ExpressionStatement","src":"1766:58:159"}]},"functionSelector":"f8453e7c","implemented":true,"kind":"function","modifiers":[{"id":75312,"kind":"modifierInvocation","modifierName":{"id":75311,"name":"initializer","nameLocations":["1336:11:159"],"nodeType":"IdentifierPath","referencedDeclaration":39495,"src":"1336:11:159"},"nodeType":"ModifierInvocation","src":"1336:11:159"}],"name":"initialize","nameLocation":"1163:10:159","parameters":{"id":75310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75300,"mutability":"mutable","name":"_owner","nameLocation":"1191:6:159","nodeType":"VariableDeclaration","scope":75370,"src":"1183:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75299,"name":"address","nodeType":"ElementaryTypeName","src":"1183:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75302,"mutability":"mutable","name":"_mirror","nameLocation":"1215:7:159","nodeType":"VariableDeclaration","scope":75370,"src":"1207:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75301,"name":"address","nodeType":"ElementaryTypeName","src":"1207:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75304,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1240:12:159","nodeType":"VariableDeclaration","scope":75370,"src":"1232:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75303,"name":"address","nodeType":"ElementaryTypeName","src":"1232:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75306,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1270:12:159","nodeType":"VariableDeclaration","scope":75370,"src":"1262:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75305,"name":"address","nodeType":"ElementaryTypeName","src":"1262:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75309,"mutability":"mutable","name":"_validators","nameLocation":"1311:11:159","nodeType":"VariableDeclaration","scope":75370,"src":"1292:30:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75307,"name":"address","nodeType":"ElementaryTypeName","src":"1292:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75308,"nodeType":"ArrayTypeName","src":"1292:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1173:155:159"},"returnParameters":{"id":75313,"nodeType":"ParameterList","parameters":[],"src":"1348:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75434,"nodeType":"FunctionDefinition","src":"1837:600:159","nodes":[],"body":{"id":75433,"nodeType":"Block","src":"1895:542:159","nodes":[],"statements":[{"assignments":[75380],"declarations":[{"constant":false,"id":75380,"mutability":"mutable","name":"oldRouter","nameLocation":"1921:9:159","nodeType":"VariableDeclaration","scope":75433,"src":"1905:25:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75379,"nodeType":"UserDefinedTypeName","pathNode":{"id":75378,"name":"Storage","nameLocations":["1905:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"1905:7:159"},"referencedDeclaration":73677,"src":"1905:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75383,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75381,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"1933:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1933:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1905:37:159"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":75385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1969:25:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":75384,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76826,"src":"1953:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":75386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1953:42:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75387,"nodeType":"ExpressionStatement","src":"1953:42:159"},{"assignments":[75390],"declarations":[{"constant":false,"id":75390,"mutability":"mutable","name":"newRouter","nameLocation":"2021:9:159","nodeType":"VariableDeclaration","scope":75433,"src":"2005:25:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75389,"nodeType":"UserDefinedTypeName","pathNode":{"id":75388,"name":"Storage","nameLocations":["2005:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"2005:7:159"},"referencedDeclaration":73677,"src":"2005:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75393,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75391,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2033:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2005:37:159"},{"expression":{"id":75400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75394,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2053:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75396,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2063:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"2053:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":75397,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"2078:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2083:10:159","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":77223,"src":"2078:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$77003_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":75399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2078:17:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"2053:42:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75401,"nodeType":"ExpressionStatement","src":"2053:42:159"},{"expression":{"id":75407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75402,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2105:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75404,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2115:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2105:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75405,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2131:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2141:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2131:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"src":"2105:49:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75408,"nodeType":"ExpressionStatement","src":"2105:49:159"},{"expression":{"id":75417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":75409,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2165:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2175:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"2165:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2194:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"2165:55:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":75414,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2235:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2245:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"2235:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2264:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"2235:55:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2165:125:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":75418,"nodeType":"ExpressionStatement","src":"2165:125:159"},{"expression":{"arguments":[{"id":75420,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2315:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"expression":{"id":75421,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2326:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2336:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"2326:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2355:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"2326:39:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}],"id":75419,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76718,"src":"2300:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (struct IRouter.Storage storage pointer,address[] memory)"}},"id":75424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2300:66:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75425,"nodeType":"ExpressionStatement","src":"2300:66:159"},{"expression":{"id":75431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":75426,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75390,"src":"2377:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2387:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"2377:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":75429,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75380,"src":"2405:9:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2415:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"2405:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"src":"2377:53:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":75432,"nodeType":"ExpressionStatement","src":"2377:53:159"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":75373,"kind":"modifierInvocation","modifierName":{"id":75372,"name":"onlyOwner","nameLocations":["1868:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1868:9:159"},"nodeType":"ModifierInvocation","src":"1868:9:159"},{"arguments":[{"hexValue":"32","id":75375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1892:1:159","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":75376,"kind":"modifierInvocation","modifierName":{"id":75374,"name":"reinitializer","nameLocations":["1878:13:159"],"nodeType":"IdentifierPath","referencedDeclaration":39542,"src":"1878:13:159"},"nodeType":"ModifierInvocation","src":"1878:16:159"}],"name":"reinitialize","nameLocation":"1846:12:159","parameters":{"id":75371,"nodeType":"ParameterList","parameters":[],"src":"1858:2:159"},"returnParameters":{"id":75377,"nodeType":"ParameterList","parameters":[],"src":"1895:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":75445,"nodeType":"FunctionDefinition","src":"2459:109:159","nodes":[],"body":{"id":75444,"nodeType":"Block","src":"2517:51:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75439,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2534:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2534:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2544:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"2534:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2557:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"2534:27:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75438,"id":75443,"nodeType":"Return","src":"2527:34:159"}]},"baseFunctions":[73721],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"2468:16:159","parameters":{"id":75435,"nodeType":"ParameterList","parameters":[],"src":"2484:2:159"},"returnParameters":{"id":75438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75445,"src":"2508:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75436,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2508:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2507:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75456,"nodeType":"FunctionDefinition","src":"2574:125:159","nodes":[],"body":{"id":75455,"nodeType":"Block","src":"2640:59:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75450,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2657:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2657:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2667:20:159","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":73660,"src":"2657:30:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":75453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2688:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76988,"src":"2657:35:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75449,"id":75454,"nodeType":"Return","src":"2650:42:159"}]},"baseFunctions":[73726],"functionSelector":"c9f16a11","implemented":true,"kind":"function","modifiers":[],"name":"latestCommittedBlockHash","nameLocation":"2583:24:159","parameters":{"id":75446,"nodeType":"ParameterList","parameters":[],"src":"2607:2:159"},"returnParameters":{"id":75449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75448,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75456,"src":"2631:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75447,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2631:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2630:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75467,"nodeType":"FunctionDefinition","src":"2705:106:159","nodes":[],"body":{"id":75466,"nodeType":"Block","src":"2757:54:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75461,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2774:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2774:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2784:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2774:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2798:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":76959,"src":"2774:30:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75460,"id":75465,"nodeType":"Return","src":"2767:37:159"}]},"baseFunctions":[73731],"functionSelector":"e6fabc09","implemented":true,"kind":"function","modifiers":[],"name":"mirrorImpl","nameLocation":"2714:10:159","parameters":{"id":75457,"nodeType":"ParameterList","parameters":[],"src":"2724:2:159"},"returnParameters":{"id":75460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75467,"src":"2748:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75458,"name":"address","nodeType":"ElementaryTypeName","src":"2748:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2747:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75478,"nodeType":"FunctionDefinition","src":"2817:116:159","nodes":[],"body":{"id":75477,"nodeType":"Block","src":"2874:59:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75472,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"2891:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2891:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2901:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"2891:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2915:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":76961,"src":"2891:35:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75471,"id":75476,"nodeType":"Return","src":"2884:42:159"}]},"baseFunctions":[73736],"functionSelector":"65ecfea2","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxyImpl","nameLocation":"2826:15:159","parameters":{"id":75468,"nodeType":"ParameterList","parameters":[],"src":"2841:2:159"},"returnParameters":{"id":75471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75470,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75478,"src":"2865:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75469,"name":"address","nodeType":"ElementaryTypeName","src":"2865:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2864:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75489,"nodeType":"FunctionDefinition","src":"2939:112:159","nodes":[],"body":{"id":75488,"nodeType":"Block","src":"2992:59:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75483,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3009:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3009:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3019:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"3009:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3033:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":76963,"src":"3009:35:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75482,"id":75487,"nodeType":"Return","src":"3002:42:159"}]},"baseFunctions":[73741],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"2948:11:159","parameters":{"id":75479,"nodeType":"ParameterList","parameters":[],"src":"2959:2:159"},"returnParameters":{"id":75482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75489,"src":"2983:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75480,"name":"address","nodeType":"ElementaryTypeName","src":"2983:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2982:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75531,"nodeType":"FunctionDefinition","src":"3057:348:159","nodes":[],"body":{"id":75530,"nodeType":"Block","src":"3139:266:159","nodes":[],"statements":[{"assignments":[75499],"declarations":[{"constant":false,"id":75499,"mutability":"mutable","name":"router","nameLocation":"3165:6:159","nodeType":"VariableDeclaration","scope":75530,"src":"3149:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75498,"nodeType":"UserDefinedTypeName","pathNode":{"id":75497,"name":"Storage","nameLocations":["3149:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"3149:7:159"},"referencedDeclaration":73677,"src":"3149:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75502,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75500,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3174:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3174:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3149:34:159"},{"body":{"id":75526,"nodeType":"Block","src":"3243:134:159","statements":[{"condition":{"id":75521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3261:59:159","subExpression":{"baseExpression":{"expression":{"expression":{"id":75514,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75499,"src":"3262:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3269:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3262:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3288:16:159","memberName":"validatorsKeyMap","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"3262:42:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":75520,"indexExpression":{"baseExpression":{"id":75517,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75492,"src":"3305:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75519,"indexExpression":{"id":75518,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75504,"src":"3317:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3305:14:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3262:58:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75525,"nodeType":"IfStatement","src":"3257:110:159","trueBody":{"id":75524,"nodeType":"Block","src":"3322:45:159","statements":[{"expression":{"hexValue":"66616c7365","id":75522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3347:5:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":75496,"id":75523,"nodeType":"Return","src":"3340:12:159"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75507,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75504,"src":"3214:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":75508,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75492,"src":"3218:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3230:6:159","memberName":"length","nodeType":"MemberAccess","src":"3218:18:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3214:22:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75527,"initializationExpression":{"assignments":[75504],"declarations":[{"constant":false,"id":75504,"mutability":"mutable","name":"i","nameLocation":"3207:1:159","nodeType":"VariableDeclaration","scope":75527,"src":"3199:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75503,"name":"uint256","nodeType":"ElementaryTypeName","src":"3199:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75506,"initialValue":{"hexValue":"30","id":75505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3211:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3199:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3238:3:159","subExpression":{"id":75511,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75504,"src":"3238:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75513,"nodeType":"ExpressionStatement","src":"3238:3:159"},"nodeType":"ForStatement","src":"3194:183:159"},{"expression":{"hexValue":"74727565","id":75528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3394:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":75496,"id":75529,"nodeType":"Return","src":"3387:11:159"}]},"baseFunctions":[73749],"functionSelector":"8f381dbe","implemented":true,"kind":"function","modifiers":[],"name":"areValidators","nameLocation":"3066:13:159","parameters":{"id":75493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75492,"mutability":"mutable","name":"_validators","nameLocation":"3099:11:159","nodeType":"VariableDeclaration","scope":75531,"src":"3080:30:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75490,"name":"address","nodeType":"ElementaryTypeName","src":"3080:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75491,"nodeType":"ArrayTypeName","src":"3080:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3079:32:159"},"returnParameters":{"id":75496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75531,"src":"3133:4:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75494,"name":"bool","nodeType":"ElementaryTypeName","src":"3133:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3132:6:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75546,"nodeType":"FunctionDefinition","src":"3411:149:159","nodes":[],"body":{"id":75545,"nodeType":"Block","src":"3479:81:159","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75538,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3496:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3496:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3506:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3496:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3525:16:159","memberName":"validatorsKeyMap","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"3496:45:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":75543,"indexExpression":{"id":75542,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75533,"src":"3542:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3496:57:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":75537,"id":75544,"nodeType":"Return","src":"3489:64:159"}]},"baseFunctions":[73756],"functionSelector":"facd743b","implemented":true,"kind":"function","modifiers":[],"name":"isValidator","nameLocation":"3420:11:159","parameters":{"id":75534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75533,"mutability":"mutable","name":"_validator","nameLocation":"3440:10:159","nodeType":"VariableDeclaration","scope":75546,"src":"3432:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75532,"name":"address","nodeType":"ElementaryTypeName","src":"3432:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3431:20:159"},"returnParameters":{"id":75537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75546,"src":"3473:4:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":75535,"name":"bool","nodeType":"ElementaryTypeName","src":"3473:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3472:6:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75557,"nodeType":"FunctionDefinition","src":"3566:146:159","nodes":[],"body":{"id":75556,"nodeType":"Block","src":"3633:79:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75551,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3650:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3650:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3660:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3650:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3679:26:159","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":77053,"src":"3650:55:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":75550,"id":75555,"nodeType":"Return","src":"3643:62:159"}]},"baseFunctions":[73761],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"3575:26:159","parameters":{"id":75547,"nodeType":"ParameterList","parameters":[],"src":"3601:2:159"},"returnParameters":{"id":75550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75549,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75557,"src":"3625:6:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":75548,"name":"uint16","nodeType":"ElementaryTypeName","src":"3625:6:159","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"3624:8:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75569,"nodeType":"FunctionDefinition","src":"3718:124:159","nodes":[],"body":{"id":75568,"nodeType":"Block","src":"3779:63:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75563,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3796:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3796:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75565,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3806:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3796:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3825:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"3796:39:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":75562,"id":75567,"nodeType":"Return","src":"3789:46:159"}]},"baseFunctions":[73767],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"3727:10:159","parameters":{"id":75558,"nodeType":"ParameterList","parameters":[],"src":"3737:2:159"},"returnParameters":{"id":75562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75569,"src":"3761:16:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75559,"name":"address","nodeType":"ElementaryTypeName","src":"3761:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75560,"nodeType":"ArrayTypeName","src":"3761:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3760:18:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75581,"nodeType":"FunctionDefinition","src":"3848:127:159","nodes":[],"body":{"id":75580,"nodeType":"Block","src":"3905:70:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75574,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"3922:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3922:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3932:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"3922:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":75577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3951:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"3922:39:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":75578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3962:6:159","memberName":"length","nodeType":"MemberAccess","src":"3922:46:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75573,"id":75579,"nodeType":"Return","src":"3915:53:159"}]},"baseFunctions":[73772],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"3857:15:159","parameters":{"id":75570,"nodeType":"ParameterList","parameters":[],"src":"3872:2:159"},"returnParameters":{"id":75573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75581,"src":"3896:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75571,"name":"uint256","nodeType":"ElementaryTypeName","src":"3896:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3895:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75594,"nodeType":"FunctionDefinition","src":"3981:141:159","nodes":[],"body":{"id":75593,"nodeType":"Block","src":"4042:80:159","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75588,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4086:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4086:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4096:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"4086:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}],"expression":{"id":75586,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"4059:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4064:21:159","memberName":"validatorsThresholdOf","nodeType":"MemberAccess","referencedDeclaration":77358,"src":"4059:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ValidationSettings_$77061_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct Gear.ValidationSettings storage pointer) view returns (uint256)"}},"id":75591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:56:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75585,"id":75592,"nodeType":"Return","src":"4052:63:159"}]},"baseFunctions":[73777],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"3990:19:159","parameters":{"id":75582,"nodeType":"ParameterList","parameters":[],"src":"4009:2:159"},"returnParameters":{"id":75585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75594,"src":"4033:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75583,"name":"uint256","nodeType":"ElementaryTypeName","src":"4033:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4032:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75605,"nodeType":"FunctionDefinition","src":"4128:130:159","nodes":[],"body":{"id":75604,"nodeType":"Block","src":"4209:49:159","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75600,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4226:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4226:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75602,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4236:15:159","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":73672,"src":"4226:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"functionReturnParameters":75599,"id":75603,"nodeType":"Return","src":"4219:32:159"}]},"baseFunctions":[73783],"functionSelector":"84d22a4f","implemented":true,"kind":"function","modifiers":[],"name":"computeSettings","nameLocation":"4137:15:159","parameters":{"id":75595,"nodeType":"ParameterList","parameters":[],"src":"4152:2:159"},"returnParameters":{"id":75599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75598,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75605,"src":"4176:31:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_memory_ptr","typeString":"struct Gear.ComputationSettings"},"typeName":{"id":75597,"nodeType":"UserDefinedTypeName","pathNode":{"id":75596,"name":"Gear.ComputationSettings","nameLocations":["4176:4:159","4181:19:159"],"nodeType":"IdentifierPath","referencedDeclaration":76996,"src":"4176:24:159"},"referencedDeclaration":76996,"src":"4176:24:159","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$76996_storage_ptr","typeString":"struct Gear.ComputationSettings"}},"visibility":"internal"}],"src":"4175:33:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75621,"nodeType":"FunctionDefinition","src":"4264:134:159","nodes":[],"body":{"id":75620,"nodeType":"Block","src":"4337:61:159","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75613,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4354:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4354:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4364:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"4354:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4377:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"4354:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75618,"indexExpression":{"id":75617,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75607,"src":"4383:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4354:37:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"functionReturnParameters":75612,"id":75619,"nodeType":"Return","src":"4347:44:159"}]},"baseFunctions":[73791],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"4273:9:159","parameters":{"id":75608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75607,"mutability":"mutable","name":"_codeId","nameLocation":"4291:7:159","nodeType":"VariableDeclaration","scope":75621,"src":"4283:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75606,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4283:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4282:17:159"},"returnParameters":{"id":75612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75621,"src":"4321:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"typeName":{"id":75610,"nodeType":"UserDefinedTypeName","pathNode":{"id":75609,"name":"Gear.CodeState","nameLocations":["4321:4:159","4326:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4321:14:159"},"referencedDeclaration":76986,"src":"4321:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"visibility":"internal"}],"src":"4320:16:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75679,"nodeType":"FunctionDefinition","src":"4404:378:159","nodes":[],"body":{"id":75678,"nodeType":"Block","src":"4501:281:159","nodes":[],"statements":[{"assignments":[75633],"declarations":[{"constant":false,"id":75633,"mutability":"mutable","name":"router","nameLocation":"4527:6:159","nodeType":"VariableDeclaration","scope":75678,"src":"4511:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75632,"nodeType":"UserDefinedTypeName","pathNode":{"id":75631,"name":"Storage","nameLocations":["4511:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"4511:7:159"},"referencedDeclaration":73677,"src":"4511:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75636,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75634,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4536:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4536:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4511:34:159"},{"assignments":[75642],"declarations":[{"constant":false,"id":75642,"mutability":"mutable","name":"res","nameLocation":"4580:3:159","nodeType":"VariableDeclaration","scope":75678,"src":"4556:27:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":75640,"nodeType":"UserDefinedTypeName","pathNode":{"id":75639,"name":"Gear.CodeState","nameLocations":["4556:4:159","4561:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4556:14:159"},"referencedDeclaration":76986,"src":"4556:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75641,"nodeType":"ArrayTypeName","src":"4556:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"id":75650,"initialValue":{"arguments":[{"expression":{"id":75647,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75624,"src":"4607:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":75648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4617:6:159","memberName":"length","nodeType":"MemberAccess","src":"4607:16:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4586:20:159","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (enum Gear.CodeState[] memory)"},"typeName":{"baseType":{"id":75644,"nodeType":"UserDefinedTypeName","pathNode":{"id":75643,"name":"Gear.CodeState","nameLocations":["4590:4:159","4595:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4590:14:159"},"referencedDeclaration":76986,"src":"4590:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75645,"nodeType":"ArrayTypeName","src":"4590:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}}},"id":75649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4586:38:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4556:68:159"},{"body":{"id":75674,"nodeType":"Block","src":"4682:73:159","statements":[{"expression":{"id":75672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":75662,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75642,"src":"4696:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"id":75664,"indexExpression":{"id":75663,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4700:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4696:6:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":75665,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75633,"src":"4705:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4712:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"4705:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4725:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"4705:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75671,"indexExpression":{"baseExpression":{"id":75668,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75624,"src":"4731:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":75670,"indexExpression":{"id":75669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4741:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4731:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4705:39:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"4696:48:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75673,"nodeType":"ExpressionStatement","src":"4696:48:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75655,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4655:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":75656,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75624,"src":"4659:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":75657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4669:6:159","memberName":"length","nodeType":"MemberAccess","src":"4659:16:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4655:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75675,"initializationExpression":{"assignments":[75652],"declarations":[{"constant":false,"id":75652,"mutability":"mutable","name":"i","nameLocation":"4648:1:159","nodeType":"VariableDeclaration","scope":75675,"src":"4640:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75651,"name":"uint256","nodeType":"ElementaryTypeName","src":"4640:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75654,"initialValue":{"hexValue":"30","id":75653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4652:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4640:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4677:3:159","subExpression":{"id":75659,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75652,"src":"4677:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75661,"nodeType":"ExpressionStatement","src":"4677:3:159"},"nodeType":"ForStatement","src":"4635:120:159"},{"expression":{"id":75676,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75642,"src":"4772:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"functionReturnParameters":75630,"id":75677,"nodeType":"Return","src":"4765:10:159"}]},"baseFunctions":[73801],"functionSelector":"82bdeaad","implemented":true,"kind":"function","modifiers":[],"name":"codesStates","nameLocation":"4413:11:159","parameters":{"id":75625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75624,"mutability":"mutable","name":"_codesIds","nameLocation":"4444:9:159","nodeType":"VariableDeclaration","scope":75679,"src":"4425:28:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":75622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4425:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75623,"nodeType":"ArrayTypeName","src":"4425:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4424:30:159"},"returnParameters":{"id":75630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75679,"src":"4476:23:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":75627,"nodeType":"UserDefinedTypeName","pathNode":{"id":75626,"name":"Gear.CodeState","nameLocations":["4476:4:159","4481:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":76986,"src":"4476:14:159"},"referencedDeclaration":76986,"src":"4476:14:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75628,"nodeType":"ArrayTypeName","src":"4476:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$76986_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"src":"4475:25:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75694,"nodeType":"FunctionDefinition","src":"4788:140:159","nodes":[],"body":{"id":75693,"nodeType":"Block","src":"4861:67:159","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75686,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"4878:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4878:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4888:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"4878:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75689,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4901:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"4878:31:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":75691,"indexExpression":{"id":75690,"name":"_programId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75681,"src":"4910:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4878:43:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":75685,"id":75692,"nodeType":"Return","src":"4871:50:159"}]},"baseFunctions":[73808],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"4797:13:159","parameters":{"id":75682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75681,"mutability":"mutable","name":"_programId","nameLocation":"4819:10:159","nodeType":"VariableDeclaration","scope":75694,"src":"4811:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75680,"name":"address","nodeType":"ElementaryTypeName","src":"4811:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4810:20:159"},"returnParameters":{"id":75685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75694,"src":"4852:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4852:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4851:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75749,"nodeType":"FunctionDefinition","src":"4934:376:159","nodes":[],"body":{"id":75748,"nodeType":"Block","src":"5031:279:159","nodes":[],"statements":[{"assignments":[75705],"declarations":[{"constant":false,"id":75705,"mutability":"mutable","name":"router","nameLocation":"5057:6:159","nodeType":"VariableDeclaration","scope":75748,"src":"5041:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75704,"nodeType":"UserDefinedTypeName","pathNode":{"id":75703,"name":"Storage","nameLocations":["5041:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"5041:7:159"},"referencedDeclaration":73677,"src":"5041:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75708,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75706,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5066:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5066:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5041:34:159"},{"assignments":[75713],"declarations":[{"constant":false,"id":75713,"mutability":"mutable","name":"res","nameLocation":"5103:3:159","nodeType":"VariableDeclaration","scope":75748,"src":"5086:20:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":75711,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5086:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75712,"nodeType":"ArrayTypeName","src":"5086:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":75720,"initialValue":{"arguments":[{"expression":{"id":75717,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75697,"src":"5123:12:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5136:6:159","memberName":"length","nodeType":"MemberAccess","src":"5123:19:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":75716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5109:13:159","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":75714,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5113:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75715,"nodeType":"ArrayTypeName","src":"5113:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":75719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5109:34:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5086:57:159"},{"body":{"id":75744,"nodeType":"Block","src":"5204:79:159","statements":[{"expression":{"id":75742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":75732,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75713,"src":"5218:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":75734,"indexExpression":{"id":75733,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5222:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5218:6:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":75735,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75705,"src":"5227:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5234:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"5227:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5247:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"5227:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":75741,"indexExpression":{"baseExpression":{"id":75738,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75697,"src":"5256:12:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75740,"indexExpression":{"id":75739,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5269:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5256:15:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5227:45:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5218:54:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75743,"nodeType":"ExpressionStatement","src":"5218:54:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":75728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75725,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5174:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":75726,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75697,"src":"5178:12:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":75727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5191:6:159","memberName":"length","nodeType":"MemberAccess","src":"5178:19:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5174:23:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":75745,"initializationExpression":{"assignments":[75722],"declarations":[{"constant":false,"id":75722,"mutability":"mutable","name":"i","nameLocation":"5167:1:159","nodeType":"VariableDeclaration","scope":75745,"src":"5159:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75721,"name":"uint256","nodeType":"ElementaryTypeName","src":"5159:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":75724,"initialValue":{"hexValue":"30","id":75723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5171:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5159:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":75730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5199:3:159","subExpression":{"id":75729,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75722,"src":"5199:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":75731,"nodeType":"ExpressionStatement","src":"5199:3:159"},"nodeType":"ForStatement","src":"5154:129:159"},{"expression":{"id":75746,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75713,"src":"5300:3:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":75702,"id":75747,"nodeType":"Return","src":"5293:10:159"}]},"baseFunctions":[73817],"functionSelector":"baaf0201","implemented":true,"kind":"function","modifiers":[],"name":"programsCodeIds","nameLocation":"4943:15:159","parameters":{"id":75698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75697,"mutability":"mutable","name":"_programsIds","nameLocation":"4978:12:159","nodeType":"VariableDeclaration","scope":75749,"src":"4959:31:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":75695,"name":"address","nodeType":"ElementaryTypeName","src":"4959:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75696,"nodeType":"ArrayTypeName","src":"4959:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4958:33:159"},"returnParameters":{"id":75702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75749,"src":"5013:16:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":75699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5013:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75700,"nodeType":"ArrayTypeName","src":"5013:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"5012:18:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75760,"nodeType":"FunctionDefinition","src":"5316:115:159","nodes":[],"body":{"id":75759,"nodeType":"Block","src":"5371:60:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75754,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5388:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5398:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"5388:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5411:13:159","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":77026,"src":"5388:36:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75753,"id":75758,"nodeType":"Return","src":"5381:43:159"}]},"baseFunctions":[73822],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"5325:13:159","parameters":{"id":75750,"nodeType":"ParameterList","parameters":[],"src":"5338:2:159"},"returnParameters":{"id":75753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75760,"src":"5362:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75751,"name":"uint256","nodeType":"ElementaryTypeName","src":"5362:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5361:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75771,"nodeType":"FunctionDefinition","src":"5437:127:159","nodes":[],"body":{"id":75770,"nodeType":"Block","src":"5498:66:159","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75765,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5515:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5515:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5525:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"5515:22:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5538:19:159","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":77028,"src":"5515:42:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":75764,"id":75769,"nodeType":"Return","src":"5508:49:159"}]},"baseFunctions":[73827],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"5446:19:159","parameters":{"id":75761,"nodeType":"ParameterList","parameters":[],"src":"5465:2:159"},"returnParameters":{"id":75764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75771,"src":"5489:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75762,"name":"uint256","nodeType":"ElementaryTypeName","src":"5489:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5488:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":75786,"nodeType":"FunctionDefinition","src":"5590:116:159","nodes":[],"body":{"id":75785,"nodeType":"Block","src":"5647:59:159","nodes":[],"statements":[{"expression":{"id":75783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":75778,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5657:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5657:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5667:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"5657:23:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":75781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5681:6:159","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":76959,"src":"5657:30:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":75782,"name":"newMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75773,"src":"5690:9:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5657:42:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":75784,"nodeType":"ExpressionStatement","src":"5657:42:159"}]},"baseFunctions":[73832],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":75776,"kind":"modifierInvocation","modifierName":{"id":75775,"name":"onlyOwner","nameLocations":["5637:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"5637:9:159"},"nodeType":"ModifierInvocation","src":"5637:9:159"}],"name":"setMirror","nameLocation":"5599:9:159","parameters":{"id":75774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75773,"mutability":"mutable","name":"newMirror","nameLocation":"5617:9:159","nodeType":"VariableDeclaration","scope":75786,"src":"5609:17:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75772,"name":"address","nodeType":"ElementaryTypeName","src":"5609:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5608:19:159"},"returnParameters":{"id":75777,"nodeType":"ParameterList","parameters":[],"src":"5647:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75838,"nodeType":"FunctionDefinition","src":"5728:398:159","nodes":[],"body":{"id":75837,"nodeType":"Block","src":"5766:360:159","nodes":[],"statements":[{"assignments":[75791],"declarations":[{"constant":false,"id":75791,"mutability":"mutable","name":"router","nameLocation":"5792:6:159","nodeType":"VariableDeclaration","scope":75837,"src":"5776:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75790,"nodeType":"UserDefinedTypeName","pathNode":{"id":75789,"name":"Storage","nameLocations":["5776:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"5776:7:159"},"referencedDeclaration":73677,"src":"5776:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75794,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75792,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"5801:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5801:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5776:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":75796,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"5829:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75797,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5836:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"5829:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5849:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"5829:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":75801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5865:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5857:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75799,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5857:7:159","typeDescriptions":{}}},"id":75802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5857:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5829:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"67656e65736973206861736820616c726561647920736574","id":75804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5869:26:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""},"value":"genesis hash already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""}],"id":75795,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5821:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5821:75:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75806,"nodeType":"ExpressionStatement","src":"5821:75:159"},{"assignments":[75808],"declarations":[{"constant":false,"id":75808,"mutability":"mutable","name":"genesisHash","nameLocation":"5915:11:159","nodeType":"VariableDeclaration","scope":75837,"src":"5907:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75807,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5907:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":75814,"initialValue":{"arguments":[{"expression":{"expression":{"id":75810,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"5939:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5946:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"5939:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5959:6:159","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":77000,"src":"5939:26:159","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":75809,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"5929:9:159","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5929:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5907:59:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75816,"name":"genesisHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75808,"src":"5985:11:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":75819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6008:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6000:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75817,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6000:7:159","typeDescriptions":{}}},"id":75820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6000:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5985:25:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e61626c6520746f206c6f6f6b75702067656e657369732068617368","id":75822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6012:31:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""},"value":"unable to lookup genesis hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""}],"id":75815,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5977:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5977:67:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75824,"nodeType":"ExpressionStatement","src":"5977:67:159"},{"expression":{"id":75835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":75825,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"6055:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6062:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"6055:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6075:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"6055:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":75831,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75791,"src":"6092:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6099:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"6092:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6112:6:159","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":77000,"src":"6092:26:159","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":75830,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"6082:9:159","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6082:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6055:64:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":75836,"nodeType":"ExpressionStatement","src":"6055:64:159"}]},"baseFunctions":[73835],"functionSelector":"8b1edf1e","implemented":true,"kind":"function","modifiers":[],"name":"lookupGenesisHash","nameLocation":"5737:17:159","parameters":{"id":75787,"nodeType":"ParameterList","parameters":[],"src":"5754:2:159"},"returnParameters":{"id":75788,"nodeType":"ParameterList","parameters":[],"src":"5766:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75907,"nodeType":"FunctionDefinition","src":"6132:637:159","nodes":[],"body":{"id":75906,"nodeType":"Block","src":"6210:559:159","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":75854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":75846,"name":"_blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75842,"src":"6228:11:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6243:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6228:16:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":75850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6257:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75849,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"6248:8:159","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":75851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6248:11:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":75852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6263:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6248:16:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6228:36:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f622063616e277420626520666f756e64","id":75855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6266:21:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_50f679c075644435e0dfad2beb36f786441d5cb0c0dd08ea9c9aa80169c123d2","typeString":"literal_string \"blob can't be found\""},"value":"blob can't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_50f679c075644435e0dfad2beb36f786441d5cb0c0dd08ea9c9aa80169c123d2","typeString":"literal_string \"blob can't be found\""}],"id":75845,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6220:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6220:68:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75857,"nodeType":"ExpressionStatement","src":"6220:68:159"},{"assignments":[75860],"declarations":[{"constant":false,"id":75860,"mutability":"mutable","name":"router","nameLocation":"6315:6:159","nodeType":"VariableDeclaration","scope":75906,"src":"6299:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":75859,"nodeType":"UserDefinedTypeName","pathNode":{"id":75858,"name":"Storage","nameLocations":["6299:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"6299:7:159"},"referencedDeclaration":73677,"src":"6299:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":75863,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":75861,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"6324:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":75862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6324:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6299:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":75872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":75865,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75860,"src":"6351:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6358:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"6351:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":75867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6371:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"6351:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":75870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6387:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":75869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6379:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":75868,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6379:7:159","typeDescriptions":{}}},"id":75871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6379:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6351:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":75873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6391:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":75864,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6343:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6343:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75875,"nodeType":"ExpressionStatement","src":"6343:107:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"id":75885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":75877,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75860,"src":"6482:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75878,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6489:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"6482:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6502:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"6482:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75881,"indexExpression":{"id":75880,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75840,"src":"6508:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6482:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":75882,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"6520:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6525:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"6520:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":75884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6535:7:159","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":76983,"src":"6520:22:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"6482:60:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"676976656e20636f646520696420697320616c7265616479206f6e2076616c69646174696f6e206f722076616c696461746564","id":75886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6556:53:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""},"value":"given code id is already on validation or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""}],"id":75876,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6461:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6461:158:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75888,"nodeType":"ExpressionStatement","src":"6461:158:159"},{"expression":{"id":75899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":75889,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75860,"src":"6630:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":75893,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6637:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"6630:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":75894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6650:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"6630:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":75895,"indexExpression":{"id":75892,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75840,"src":"6656:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6630:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":75896,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"6667:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":75897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6672:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"6667:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":75898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6682:19:159","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":76984,"src":"6667:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"6630:71:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":75900,"nodeType":"ExpressionStatement","src":"6630:71:159"},{"eventCall":{"arguments":[{"id":75902,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75840,"src":"6741:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75903,"name":"_blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75842,"src":"6750:11:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":75901,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73696,"src":"6717:23:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":75904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6717:45:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75905,"nodeType":"EmitStatement","src":"6712:50:159"}]},"baseFunctions":[73843],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"6141:21:159","parameters":{"id":75843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75840,"mutability":"mutable","name":"_codeId","nameLocation":"6171:7:159","nodeType":"VariableDeclaration","scope":75907,"src":"6163:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6163:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75842,"mutability":"mutable","name":"_blobTxHash","nameLocation":"6188:11:159","nodeType":"VariableDeclaration","scope":75907,"src":"6180:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75841,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6180:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6162:38:159"},"returnParameters":{"id":75844,"nodeType":"ParameterList","parameters":[],"src":"6210:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":75944,"nodeType":"FunctionDefinition","src":"6775:372:159","nodes":[],"body":{"id":75943,"nodeType":"Block","src":"6918:229:159","nodes":[],"statements":[{"assignments":[75921,75923],"declarations":[{"constant":false,"id":75921,"mutability":"mutable","name":"actorId","nameLocation":"6937:7:159","nodeType":"VariableDeclaration","scope":75943,"src":"6929:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75920,"name":"address","nodeType":"ElementaryTypeName","src":"6929:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75923,"mutability":"mutable","name":"executableBalance","nameLocation":"6954:17:159","nodeType":"VariableDeclaration","scope":75943,"src":"6946:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75922,"name":"uint128","nodeType":"ElementaryTypeName","src":"6946:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75929,"initialValue":{"arguments":[{"id":75925,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75909,"src":"7004:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75926,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75911,"src":"7013:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75927,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75915,"src":"7020:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75924,"name":"_createProgramWithoutMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76312,"src":"6975:28:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint128_$returns$_t_address_$_t_uint128_$","typeString":"function (bytes32,bytes32,uint128) returns (address,uint128)"}},"id":75928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6975:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"nodeType":"VariableDeclarationStatement","src":"6928:99:159"},{"expression":{"arguments":[{"expression":{"id":75934,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7067:3:159","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7071:6:159","memberName":"sender","nodeType":"MemberAccess","src":"7067:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75936,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75913,"src":"7079:8:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75937,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75915,"src":"7089:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75938,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75923,"src":"7097:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":75931,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75921,"src":"7046:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75930,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"7038:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73603_$","typeString":"type(contract IMirror)"}},"id":75932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7038:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":75933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7055:11:159","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":73602,"src":"7038:28:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":75939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7038:77:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75940,"nodeType":"ExpressionStatement","src":"7038:77:159"},{"expression":{"id":75941,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75921,"src":"7133:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75919,"id":75942,"nodeType":"Return","src":"7126:14:159"}]},"baseFunctions":[73857],"functionSelector":"8074b455","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"6784:13:159","parameters":{"id":75916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75909,"mutability":"mutable","name":"_codeId","nameLocation":"6806:7:159","nodeType":"VariableDeclaration","scope":75944,"src":"6798:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75908,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6798:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75911,"mutability":"mutable","name":"_salt","nameLocation":"6823:5:159","nodeType":"VariableDeclaration","scope":75944,"src":"6815:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75910,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6815:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75913,"mutability":"mutable","name":"_payload","nameLocation":"6845:8:159","nodeType":"VariableDeclaration","scope":75944,"src":"6830:23:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75912,"name":"bytes","nodeType":"ElementaryTypeName","src":"6830:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75915,"mutability":"mutable","name":"_value","nameLocation":"6863:6:159","nodeType":"VariableDeclaration","scope":75944,"src":"6855:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75914,"name":"uint128","nodeType":"ElementaryTypeName","src":"6855:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6797:73:159"},"returnParameters":{"id":75919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75918,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":75944,"src":"6905:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75917,"name":"address","nodeType":"ElementaryTypeName","src":"6905:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6904:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76002,"nodeType":"FunctionDefinition","src":"7153:579:159","nodes":[],"body":{"id":76001,"nodeType":"Block","src":"7355:377:159","nodes":[],"statements":[{"assignments":[75960,75962],"declarations":[{"constant":false,"id":75960,"mutability":"mutable","name":"actorId","nameLocation":"7374:7:159","nodeType":"VariableDeclaration","scope":76001,"src":"7366:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75959,"name":"address","nodeType":"ElementaryTypeName","src":"7366:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75962,"mutability":"mutable","name":"executableBalance","nameLocation":"7391:17:159","nodeType":"VariableDeclaration","scope":76001,"src":"7383:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75961,"name":"uint128","nodeType":"ElementaryTypeName","src":"7383:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":75968,"initialValue":{"arguments":[{"id":75964,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75948,"src":"7441:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75965,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75950,"src":"7450:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75966,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75954,"src":"7457:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":75963,"name":"_createProgramWithoutMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76312,"src":"7412:28:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint128_$returns$_t_address_$_t_uint128_$","typeString":"function (bytes32,bytes32,uint128) returns (address,uint128)"}},"id":75967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7412:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"nodeType":"VariableDeclarationStatement","src":"7365:99:159"},{"assignments":[75971],"declarations":[{"constant":false,"id":75971,"mutability":"mutable","name":"mirrorInstance","nameLocation":"7483:14:159","nodeType":"VariableDeclaration","scope":76001,"src":"7475:22:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"},"typeName":{"id":75970,"nodeType":"UserDefinedTypeName","pathNode":{"id":75969,"name":"IMirror","nameLocations":["7475:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73603,"src":"7475:7:159"},"referencedDeclaration":73603,"src":"7475:7:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"visibility":"internal"}],"id":75975,"initialValue":{"arguments":[{"id":75973,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75960,"src":"7508:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":75972,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"7500:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73603_$","typeString":"type(contract IMirror)"}},"id":75974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7500:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"7475:41:159"},{"expression":{"arguments":[{"id":75979,"name":"_decoderImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75946,"src":"7556:12:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":75983,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75948,"src":"7597:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":75984,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75950,"src":"7606:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75981,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7580:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":75982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7584:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"7580:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":75985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7580:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":75980,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7570:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":75986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7570:43:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":75976,"name":"mirrorInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75971,"src":"7527:14:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":75978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7542:13:159","memberName":"createDecoder","nodeType":"MemberAccess","referencedDeclaration":73591,"src":"7527:28:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32) external"}},"id":75987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7527:87:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75988,"nodeType":"ExpressionStatement","src":"7527:87:159"},{"expression":{"arguments":[{"expression":{"id":75992,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7652:3:159","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":75993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7656:6:159","memberName":"sender","nodeType":"MemberAccess","src":"7652:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":75994,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75952,"src":"7664:8:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":75995,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75954,"src":"7674:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":75996,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75962,"src":"7682:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":75989,"name":"mirrorInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75971,"src":"7625:14:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":75991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7640:11:159","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":73602,"src":"7625:26:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":75997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7625:75:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75998,"nodeType":"ExpressionStatement","src":"7625:75:159"},{"expression":{"id":75999,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75960,"src":"7718:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":75958,"id":76000,"nodeType":"Return","src":"7711:14:159"}]},"baseFunctions":[73873],"functionSelector":"666d124c","implemented":true,"kind":"function","modifiers":[],"name":"createProgramWithDecoder","nameLocation":"7162:24:159","parameters":{"id":75955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75946,"mutability":"mutable","name":"_decoderImpl","nameLocation":"7204:12:159","nodeType":"VariableDeclaration","scope":76002,"src":"7196:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75945,"name":"address","nodeType":"ElementaryTypeName","src":"7196:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":75948,"mutability":"mutable","name":"_codeId","nameLocation":"7234:7:159","nodeType":"VariableDeclaration","scope":76002,"src":"7226:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75947,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7226:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75950,"mutability":"mutable","name":"_salt","nameLocation":"7259:5:159","nodeType":"VariableDeclaration","scope":76002,"src":"7251:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":75949,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7251:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":75952,"mutability":"mutable","name":"_payload","nameLocation":"7289:8:159","nodeType":"VariableDeclaration","scope":76002,"src":"7274:23:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":75951,"name":"bytes","nodeType":"ElementaryTypeName","src":"7274:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":75954,"mutability":"mutable","name":"_value","nameLocation":"7315:6:159","nodeType":"VariableDeclaration","scope":76002,"src":"7307:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":75953,"name":"uint128","nodeType":"ElementaryTypeName","src":"7307:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7186:141:159"},"returnParameters":{"id":75958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75957,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76002,"src":"7346:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":75956,"name":"address","nodeType":"ElementaryTypeName","src":"7346:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7345:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76134,"nodeType":"FunctionDefinition","src":"7765:1336:159","nodes":[],"body":{"id":76133,"nodeType":"Block","src":"7874:1227:159","nodes":[],"statements":[{"assignments":[76014],"declarations":[{"constant":false,"id":76014,"mutability":"mutable","name":"router","nameLocation":"7900:6:159","nodeType":"VariableDeclaration","scope":76133,"src":"7884:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76013,"nodeType":"UserDefinedTypeName","pathNode":{"id":76012,"name":"Storage","nameLocations":["7884:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"7884:7:159"},"referencedDeclaration":73677,"src":"7884:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76017,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76015,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"7909:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7909:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7884:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76019,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"7936:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7943:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"7936:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":76021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7956:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"7936:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76024,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7972:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7964:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76022,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7964:7:159","typeDescriptions":{}}},"id":76025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7964:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7936:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":76027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7976:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":76018,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7928:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7928:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76029,"nodeType":"ExpressionStatement","src":"7928:107:159"},{"assignments":[76031],"declarations":[{"constant":false,"id":76031,"mutability":"mutable","name":"codeCommitmentsHashes","nameLocation":"8059:21:159","nodeType":"VariableDeclaration","scope":76133,"src":"8046:34:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76030,"name":"bytes","nodeType":"ElementaryTypeName","src":"8046:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76032,"nodeType":"VariableDeclarationStatement","src":"8046:34:159"},{"body":{"id":76119,"nodeType":"Block","src":"8145:784:159","statements":[{"assignments":[76048],"declarations":[{"constant":false,"id":76048,"mutability":"mutable","name":"codeCommitment","nameLocation":"8188:14:159","nodeType":"VariableDeclaration","scope":76119,"src":"8159:43:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment"},"typeName":{"id":76047,"nodeType":"UserDefinedTypeName","pathNode":{"id":76046,"name":"Gear.CodeCommitment","nameLocations":["8159:4:159","8164:14:159"],"nodeType":"IdentifierPath","referencedDeclaration":76982,"src":"8159:19:159"},"referencedDeclaration":76982,"src":"8159:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"visibility":"internal"}],"id":76052,"initialValue":{"baseExpression":{"id":76049,"name":"_codeCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76006,"src":"8205:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":76051,"indexExpression":{"id":76050,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76034,"src":"8222:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8205:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"8159:65:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"id":76063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":76054,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8264:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76055,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8271:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8264:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8284:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"8264:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76059,"indexExpression":{"expression":{"id":76057,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8290:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8305:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8290:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8264:44:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":76060,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8312:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8317:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"8312:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":76062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8327:19:159","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":76984,"src":"8312:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"8264:82:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652072657175657374656420666f722076616c69646174696f6e20746f20626520636f6d6d6974746564","id":76064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8364:55:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""},"value":"code must be requested for validation to be committed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""}],"id":76053,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8239:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8239:194:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76066,"nodeType":"ExpressionStatement","src":"8239:194:159"},{"condition":{"expression":{"id":76067,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8452:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8467:5:159","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":76981,"src":"8452:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76098,"nodeType":"Block","src":"8643:84:159","statements":[{"expression":{"id":76096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"8661:51:159","subExpression":{"baseExpression":{"expression":{"expression":{"id":76090,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8668:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8675:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8668:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8688:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"8668:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76095,"indexExpression":{"expression":{"id":76093,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8694:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8709:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8694:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8668:44:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76097,"nodeType":"ExpressionStatement","src":"8661:51:159"}]},"id":76099,"nodeType":"IfStatement","src":"8448:279:159","trueBody":{"id":76089,"nodeType":"Block","src":"8474:163:159","statements":[{"expression":{"id":76080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":76069,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8492:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8499:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8492:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8512:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"8492:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76076,"indexExpression":{"expression":{"id":76072,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8518:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8533:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8518:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8492:44:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":76077,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8539:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8544:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"8539:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":76079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8554:9:159","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":76985,"src":"8539:24:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"8492:71:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"id":76081,"nodeType":"ExpressionStatement","src":"8492:71:159"},{"expression":{"id":76087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8581:41:159","subExpression":{"expression":{"expression":{"id":76082,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8581:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8588:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"8581:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8601:19:159","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":77028,"src":"8581:39:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76088,"nodeType":"ExpressionStatement","src":"8581:41:159"}]}},{"eventCall":{"arguments":[{"expression":{"id":76101,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8763:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8778:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":76979,"src":"8763:17:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76103,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8782:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":76104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8797:5:159","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":76981,"src":"8782:20:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":76100,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73689,"src":"8746:16:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":76105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8746:57:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76106,"nodeType":"EmitStatement","src":"8741:62:159"},{"expression":{"id":76117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76107,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76031,"src":"8818:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76111,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76031,"src":"8855:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76114,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76048,"src":"8902:14:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$76982_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}],"expression":{"id":76112,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8878:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8883:18:159","memberName":"codeCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":77158,"src":"8878:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$76982_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.CodeCommitment calldata) pure returns (bytes32)"}},"id":76115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:39:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8842:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76108,"name":"bytes","nodeType":"ElementaryTypeName","src":"8842:5:159","typeDescriptions":{}}},"id":76110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8848:6:159","memberName":"concat","nodeType":"MemberAccess","src":"8842:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8842:76:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8818:100:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76118,"nodeType":"ExpressionStatement","src":"8818:100:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76037,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76034,"src":"8111:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76038,"name":"_codeCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76006,"src":"8115:16:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":76039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8132:6:159","memberName":"length","nodeType":"MemberAccess","src":"8115:23:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8111:27:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76120,"initializationExpression":{"assignments":[76034],"declarations":[{"constant":false,"id":76034,"mutability":"mutable","name":"i","nameLocation":"8104:1:159","nodeType":"VariableDeclaration","scope":76120,"src":"8096:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76033,"name":"uint256","nodeType":"ElementaryTypeName","src":"8096:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76036,"initialValue":{"hexValue":"30","id":76035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8108:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8096:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8140:3:159","subExpression":{"id":76041,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76034,"src":"8140:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76043,"nodeType":"ExpressionStatement","src":"8140:3:159"},"nodeType":"ForStatement","src":"8091:838:159"},{"expression":{"arguments":[{"arguments":[{"id":76124,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76014,"src":"8984:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"arguments":[{"id":76126,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76031,"src":"9002:21:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76125,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8992:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8992:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76128,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76009,"src":"9026:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"expression":{"id":76122,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"8960:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8965:18:159","memberName":"validateSignatures","nodeType":"MemberAccess","referencedDeclaration":77334,"src":"8960:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$73677_storage_ptr_$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes calldata[] calldata) view returns (bool)"}},"id":76129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8960:78:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":76130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9052:32:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":76121,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8939:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8939:155:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76132,"nodeType":"ExpressionStatement","src":"8939:155:159"}]},"baseFunctions":[73884],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"7774:11:159","parameters":{"id":76010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76006,"mutability":"mutable","name":"_codeCommitments","nameLocation":"7817:16:159","nodeType":"VariableDeclaration","scope":76134,"src":"7786:47:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment[]"},"typeName":{"baseType":{"id":76004,"nodeType":"UserDefinedTypeName","pathNode":{"id":76003,"name":"Gear.CodeCommitment","nameLocations":["7786:4:159","7791:14:159"],"nodeType":"IdentifierPath","referencedDeclaration":76982,"src":"7786:19:159"},"referencedDeclaration":76982,"src":"7786:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$76982_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"id":76005,"nodeType":"ArrayTypeName","src":"7786:21:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$76982_storage_$dyn_storage_ptr","typeString":"struct Gear.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":76009,"mutability":"mutable","name":"_signatures","nameLocation":"7852:11:159","nodeType":"VariableDeclaration","scope":76134,"src":"7835:28:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":76007,"name":"bytes","nodeType":"ElementaryTypeName","src":"7835:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":76008,"nodeType":"ArrayTypeName","src":"7835:7:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"7785:79:159"},"returnParameters":{"id":76011,"nodeType":"ParameterList","parameters":[],"src":"7874:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76214,"nodeType":"FunctionDefinition","src":"9107:798:159","nodes":[],"body":{"id":76213,"nodeType":"Block","src":"9252:653:159","nodes":[],"statements":[{"assignments":[76148],"declarations":[{"constant":false,"id":76148,"mutability":"mutable","name":"router","nameLocation":"9278:6:159","nodeType":"VariableDeclaration","scope":76213,"src":"9262:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76147,"nodeType":"UserDefinedTypeName","pathNode":{"id":76146,"name":"Storage","nameLocations":["9262:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"9262:7:159"},"referencedDeclaration":73677,"src":"9262:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76151,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76149,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"9287:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9287:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9262:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76153,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76148,"src":"9314:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9321:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"9314:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":76155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9334:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"9314:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9350:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9342:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76156,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9342:7:159","typeDescriptions":{}}},"id":76159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9342:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9314:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":76161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9354:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":76152,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9306:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9306:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76163,"nodeType":"ExpressionStatement","src":"9306:107:159"},{"assignments":[76165],"declarations":[{"constant":false,"id":76165,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"9437:22:159","nodeType":"VariableDeclaration","scope":76213,"src":"9424:35:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76164,"name":"bytes","nodeType":"ElementaryTypeName","src":"9424:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76166,"nodeType":"VariableDeclarationStatement","src":"9424:35:159"},{"body":{"id":76199,"nodeType":"Block","src":"9525:207:159","statements":[{"assignments":[76182],"declarations":[{"constant":false,"id":76182,"mutability":"mutable","name":"blockCommitment","nameLocation":"9569:15:159","nodeType":"VariableDeclaration","scope":76199,"src":"9539:45:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment"},"typeName":{"id":76181,"nodeType":"UserDefinedTypeName","pathNode":{"id":76180,"name":"Gear.BlockCommitment","nameLocations":["9539:4:159","9544:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":76977,"src":"9539:20:159"},"referencedDeclaration":76977,"src":"9539:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"visibility":"internal"}],"id":76186,"initialValue":{"baseExpression":{"id":76183,"name":"_blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76138,"src":"9587:17:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata[] calldata"}},"id":76185,"indexExpression":{"id":76184,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76168,"src":"9605:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9587:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"9539:68:159"},{"expression":{"id":76197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76187,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76165,"src":"9621:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76191,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76165,"src":"9659:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76193,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76148,"src":"9696:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":76194,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76182,"src":"9704:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}],"id":76192,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76413,"src":"9683:12:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_struct$_BlockCommitment_$76977_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BlockCommitment calldata) returns (bytes32)"}},"id":76195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9683:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9646:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76188,"name":"bytes","nodeType":"ElementaryTypeName","src":"9646:5:159","typeDescriptions":{}}},"id":76190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9652:6:159","memberName":"concat","nodeType":"MemberAccess","src":"9646:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9646:75:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9621:100:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76198,"nodeType":"ExpressionStatement","src":"9621:100:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76171,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76168,"src":"9490:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76172,"name":"_blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76138,"src":"9494:17:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata[] calldata"}},"id":76173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9512:6:159","memberName":"length","nodeType":"MemberAccess","src":"9494:24:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9490:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76200,"initializationExpression":{"assignments":[76168],"declarations":[{"constant":false,"id":76168,"mutability":"mutable","name":"i","nameLocation":"9483:1:159","nodeType":"VariableDeclaration","scope":76200,"src":"9475:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76167,"name":"uint256","nodeType":"ElementaryTypeName","src":"9475:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76170,"initialValue":{"hexValue":"30","id":76169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9487:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9475:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9520:3:159","subExpression":{"id":76175,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76168,"src":"9520:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76177,"nodeType":"ExpressionStatement","src":"9520:3:159"},"nodeType":"ForStatement","src":"9470:262:159"},{"expression":{"arguments":[{"arguments":[{"id":76204,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76148,"src":"9787:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"arguments":[{"id":76206,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76165,"src":"9805:22:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76205,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9795:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9795:33:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76208,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76141,"src":"9830:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"expression":{"id":76202,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"9763:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9768:18:159","memberName":"validateSignatures","nodeType":"MemberAccess","referencedDeclaration":77334,"src":"9763:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$73677_storage_ptr_$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes calldata[] calldata) view returns (bool)"}},"id":76209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9763:79:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":76210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9856:32:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":76201,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9742:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9742:156:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76212,"nodeType":"ExpressionStatement","src":"9742:156:159"}]},"baseFunctions":[73895],"functionSelector":"01b1d156","implemented":true,"kind":"function","modifiers":[{"id":76144,"kind":"modifierInvocation","modifierName":{"id":76143,"name":"nonReentrant","nameLocations":["9235:12:159"],"nodeType":"IdentifierPath","referencedDeclaration":44000,"src":"9235:12:159"},"nodeType":"ModifierInvocation","src":"9235:12:159"}],"name":"commitBlocks","nameLocation":"9116:12:159","parameters":{"id":76142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76138,"mutability":"mutable","name":"_blockCommitments","nameLocation":"9161:17:159","nodeType":"VariableDeclaration","scope":76214,"src":"9129:49:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment[]"},"typeName":{"baseType":{"id":76136,"nodeType":"UserDefinedTypeName","pathNode":{"id":76135,"name":"Gear.BlockCommitment","nameLocations":["9129:4:159","9134:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":76977,"src":"9129:20:159"},"referencedDeclaration":76977,"src":"9129:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"id":76137,"nodeType":"ArrayTypeName","src":"9129:22:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$76977_storage_$dyn_storage_ptr","typeString":"struct Gear.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":76141,"mutability":"mutable","name":"_signatures","nameLocation":"9197:11:159","nodeType":"VariableDeclaration","scope":76214,"src":"9180:28:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":76139,"name":"bytes","nodeType":"ElementaryTypeName","src":"9180:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":76140,"nodeType":"ArrayTypeName","src":"9180:7:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9128:81:159"},"returnParameters":{"id":76145,"nodeType":"ParameterList","parameters":[],"src":"9252:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":76312,"nodeType":"FunctionDefinition","src":"9947:1144:159","nodes":[],"body":{"id":76311,"nodeType":"Block","src":"10088:1003:159","nodes":[],"statements":[{"assignments":[76229],"declarations":[{"constant":false,"id":76229,"mutability":"mutable","name":"router","nameLocation":"10114:6:159","nodeType":"VariableDeclaration","scope":76311,"src":"10098:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76228,"nodeType":"UserDefinedTypeName","pathNode":{"id":76227,"name":"Storage","nameLocations":["10098:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"10098:7:159"},"referencedDeclaration":73677,"src":"10098:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76232,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76230,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"10123:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10123:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10098:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76234,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10150:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10157:12:159","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":73656,"src":"10150:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$77003_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":76236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10170:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76998,"src":"10150:24:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10186:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10178:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76237,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10178:7:159","typeDescriptions":{}}},"id":76240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10178:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10150:38:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":76242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10190:58:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":76233,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10142:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10142:107:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76244,"nodeType":"ExpressionStatement","src":"10142:107:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"},"id":76254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":76246,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10281:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10288:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"10281:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10301:5:159","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":77020,"src":"10281:25:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$76986_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":76250,"indexExpression":{"id":76249,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"10307:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10281:34:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":76251,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"10319:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10324:9:159","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":76986,"src":"10319:14:159","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$76986_$","typeString":"type(enum Gear.CodeState)"}},"id":76253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10334:9:159","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":76985,"src":"10319:24:159","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$76986","typeString":"enum Gear.CodeState"}},"src":"10281:62:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":76255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10357:48:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":76245,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10260:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10260:155:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76257,"nodeType":"ExpressionStatement","src":"10260:155:159"},{"assignments":[76259],"declarations":[{"constant":false,"id":76259,"mutability":"mutable","name":"executableBalance","nameLocation":"10493:17:159","nodeType":"VariableDeclaration","scope":76311,"src":"10485:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76258,"name":"uint128","nodeType":"ElementaryTypeName","src":"10485:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":76261,"initialValue":{"hexValue":"31305f3030305f3030305f3030305f303030","id":76260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10513:18:159","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000_by_1","typeString":"int_const 10000000000000"},"value":"10_000_000_000_000"},"nodeType":"VariableDeclarationStatement","src":"10485:46:159"},{"expression":{"arguments":[{"id":76263,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10557:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":76266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76264,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76259,"src":"10565:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":76265,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76220,"src":"10585:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10565:26:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":76262,"name":"_retrieveValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76665,"src":"10542:14:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$73677_storage_ptr_$_t_uint128_$returns$__$","typeString":"function (struct IRouter.Storage storage pointer,uint128)"}},"id":76267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10542:50:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76268,"nodeType":"ExpressionStatement","src":"10542:50:159"},{"assignments":[76270],"declarations":[{"constant":false,"id":76270,"mutability":"mutable","name":"actorId","nameLocation":"10761:7:159","nodeType":"VariableDeclaration","scope":76311,"src":"10753:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76269,"name":"address","nodeType":"ElementaryTypeName","src":"10753:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":76284,"initialValue":{"arguments":[{"expression":{"expression":{"id":76273,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10809:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10816:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"10809:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":76275,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10830:11:159","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":76961,"src":"10809:32:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":76279,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"10870:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":76280,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76218,"src":"10879:5:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76277,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10853:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10857:12:159","memberName":"encodePacked","nodeType":"MemberAccess","src":"10853:16:159","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10853:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76276,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10843:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10843:43:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76271,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41840,"src":"10783:6:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41840_$","typeString":"type(library Clones)"}},"id":76272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10790:18:159","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41758,"src":"10783:25:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":76283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10783:104:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10753:134:159"},{"expression":{"id":76293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":76285,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10898:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10905:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"10898:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10918:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"10898:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":76291,"indexExpression":{"id":76288,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76270,"src":"10927:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10898:37:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76292,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"10938:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10898:47:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76294,"nodeType":"ExpressionStatement","src":"10898:47:159"},{"expression":{"id":76300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10955:35:159","subExpression":{"expression":{"expression":{"id":76295,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76229,"src":"10955:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76298,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10962:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"10955:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10975:13:159","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":77026,"src":"10955:33:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76301,"nodeType":"ExpressionStatement","src":"10955:35:159"},{"eventCall":{"arguments":[{"id":76303,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76270,"src":"11021:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76304,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76216,"src":"11030:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76302,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73710,"src":"11006:14:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":76305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11006:32:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76306,"nodeType":"EmitStatement","src":"11001:37:159"},{"expression":{"components":[{"id":76307,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76270,"src":"11057:7:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76308,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76259,"src":"11066:17:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":76309,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11056:28:159","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint128_$","typeString":"tuple(address,uint128)"}},"functionReturnParameters":76226,"id":76310,"nodeType":"Return","src":"11049:35:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_createProgramWithoutMessage","nameLocation":"9956:28:159","parameters":{"id":76221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76216,"mutability":"mutable","name":"_codeId","nameLocation":"9993:7:159","nodeType":"VariableDeclaration","scope":76312,"src":"9985:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76215,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9985:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76218,"mutability":"mutable","name":"_salt","nameLocation":"10010:5:159","nodeType":"VariableDeclaration","scope":76312,"src":"10002:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76217,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10002:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":76220,"mutability":"mutable","name":"_value","nameLocation":"10025:6:159","nodeType":"VariableDeclaration","scope":76312,"src":"10017:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76219,"name":"uint128","nodeType":"ElementaryTypeName","src":"10017:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9984:48:159"},"returnParameters":{"id":76226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76312,"src":"10066:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76222,"name":"address","nodeType":"ElementaryTypeName","src":"10066:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76312,"src":"10075:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76224,"name":"uint128","nodeType":"ElementaryTypeName","src":"10075:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"10065:18:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76413,"nodeType":"FunctionDefinition","src":"11097:1326:159","nodes":[],"body":{"id":76412,"nodeType":"Block","src":"11237:1186:159","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76324,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76315,"src":"11268:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76325,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11275:20:159","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":73660,"src":"11268:27:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":76326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11296:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76988,"src":"11268:32:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":76327,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11304:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11321:22:159","memberName":"previousCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":76970,"src":"11304:39:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11268:75:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b2068617368","id":76330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11357:39:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_4a13fb2485de3ac50aa69e9cf88b3994102e3ec72af73005448c8624cb4f1ed7","typeString":"literal_string \"invalid previous committed block hash\""},"value":"invalid previous committed block hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4a13fb2485de3ac50aa69e9cf88b3994102e3ec72af73005448c8624cb4f1ed7","typeString":"literal_string \"invalid previous committed block hash\""}],"id":76323,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11247:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11247:159:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76332,"nodeType":"ExpressionStatement","src":"11247:159:159"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":76336,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11449:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11466:16:159","memberName":"predecessorBlock","nodeType":"MemberAccess","referencedDeclaration":76972,"src":"11449:33:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76334,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"11425:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11430:18:159","memberName":"blockIsPredecessor","nodeType":"MemberAccess","referencedDeclaration":77139,"src":"11425:23:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":76338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11425:58:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b207761736e277420666f756e64","id":76339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11485:40:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""},"value":"allowed predecessor block wasn't found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""}],"id":76333,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11417:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11417:109:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76341,"nodeType":"ExpressionStatement","src":"11417:109:159"},{"expression":{"id":76352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":76342,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76315,"src":"11666:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11673:20:159","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":73660,"src":"11666:27:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":76347,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11720:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11737:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76966,"src":"11720:21:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76349,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11743:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11760:9:159","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":76968,"src":"11743:26:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":76345,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"11696:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11701:18:159","memberName":"CommittedBlockInfo","nodeType":"MemberAccess","referencedDeclaration":76991,"src":"11696:23:159","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CommittedBlockInfo_$76991_storage_ptr_$","typeString":"type(struct Gear.CommittedBlockInfo storage pointer)"}},"id":76351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11696:74:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_memory_ptr","typeString":"struct Gear.CommittedBlockInfo memory"}},"src":"11666:104:159","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$76991_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":76353,"nodeType":"ExpressionStatement","src":"11666:104:159"},{"assignments":[76355],"declarations":[{"constant":false,"id":76355,"mutability":"mutable","name":"transitionsHashes","nameLocation":"11794:17:159","nodeType":"VariableDeclaration","scope":76412,"src":"11781:30:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76354,"name":"bytes","nodeType":"ElementaryTypeName","src":"11781:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76356,"nodeType":"VariableDeclarationStatement","src":"11781:30:159"},{"body":{"id":76390,"nodeType":"Block","src":"11888:207:159","statements":[{"assignments":[76373],"declarations":[{"constant":false,"id":76373,"mutability":"mutable","name":"stateTransition","nameLocation":"11932:15:159","nodeType":"VariableDeclaration","scope":76390,"src":"11902:45:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":76372,"nodeType":"UserDefinedTypeName","pathNode":{"id":76371,"name":"Gear.StateTransition","nameLocations":["11902:4:159","11907:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":77051,"src":"11902:20:159"},"referencedDeclaration":77051,"src":"11902:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"id":76378,"initialValue":{"baseExpression":{"expression":{"id":76374,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11950:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11967:11:159","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":76976,"src":"11950:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$77051_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":76377,"indexExpression":{"id":76376,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76358,"src":"11979:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11950:31:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"11902:79:159"},{"expression":{"id":76388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76379,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76355,"src":"11996:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76383,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76355,"src":"12029:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76385,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76373,"src":"12067:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}],"id":76384,"name":"_doStateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76634,"src":"12048:18:159","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_StateTransition_$77051_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.StateTransition calldata) returns (bytes32)"}},"id":76386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12048:35:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12016:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76380,"name":"bytes","nodeType":"ElementaryTypeName","src":"12016:5:159","typeDescriptions":{}}},"id":76382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12022:6:159","memberName":"concat","nodeType":"MemberAccess","src":"12016:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12016:68:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"11996:88:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76389,"nodeType":"ExpressionStatement","src":"11996:88:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76361,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76358,"src":"11842:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76362,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"11846:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11863:11:159","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":76976,"src":"11846:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$77051_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":76364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11875:6:159","memberName":"length","nodeType":"MemberAccess","src":"11846:35:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11842:39:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76391,"initializationExpression":{"assignments":[76358],"declarations":[{"constant":false,"id":76358,"mutability":"mutable","name":"i","nameLocation":"11835:1:159","nodeType":"VariableDeclaration","scope":76391,"src":"11827:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76357,"name":"uint256","nodeType":"ElementaryTypeName","src":"11827:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76360,"initialValue":{"hexValue":"30","id":76359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11839:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11827:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11883:3:159","subExpression":{"id":76366,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76358,"src":"11883:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76368,"nodeType":"ExpressionStatement","src":"11883:3:159"},"nodeType":"ForStatement","src":"11822:273:159"},{"eventCall":{"arguments":[{"expression":{"id":76393,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12125:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12142:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76966,"src":"12125:21:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76392,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73682,"src":"12110:14:159","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":76395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12110:37:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76396,"nodeType":"EmitStatement","src":"12105:42:159"},{"expression":{"arguments":[{"expression":{"id":76399,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12203:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12220:4:159","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":76966,"src":"12203:21:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76401,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12238:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12255:9:159","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":76968,"src":"12238:26:159","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":76403,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12278:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12295:22:159","memberName":"previousCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":76970,"src":"12278:39:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76405,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76318,"src":"12331:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":76406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12348:16:159","memberName":"predecessorBlock","nodeType":"MemberAccess","referencedDeclaration":76972,"src":"12331:33:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":76408,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76355,"src":"12388:17:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76407,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12378:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12378:28:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76397,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"12165:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12170:19:159","memberName":"blockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":77095,"src":"12165:24:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint48_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint48,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":76410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12165:251:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76322,"id":76411,"nodeType":"Return","src":"12158:258:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"11106:12:159","parameters":{"id":76319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76315,"mutability":"mutable","name":"router","nameLocation":"11135:6:159","nodeType":"VariableDeclaration","scope":76413,"src":"11119:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76314,"nodeType":"UserDefinedTypeName","pathNode":{"id":76313,"name":"Storage","nameLocations":["11119:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"11119:7:159"},"referencedDeclaration":73677,"src":"11119:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":76318,"mutability":"mutable","name":"_blockCommitment","nameLocation":"11173:16:159","nodeType":"VariableDeclaration","scope":76413,"src":"11143:46:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_calldata_ptr","typeString":"struct Gear.BlockCommitment"},"typeName":{"id":76317,"nodeType":"UserDefinedTypeName","pathNode":{"id":76316,"name":"Gear.BlockCommitment","nameLocations":["11143:4:159","11148:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":76977,"src":"11143:20:159"},"referencedDeclaration":76977,"src":"11143:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$76977_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"visibility":"internal"}],"src":"11118:72:159"},"returnParameters":{"id":76322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76413,"src":"11224:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76320,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11224:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11223:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76634,"nodeType":"FunctionDefinition","src":"12429:2183:159","nodes":[],"body":{"id":76633,"nodeType":"Block","src":"12531:2081:159","nodes":[],"statements":[{"assignments":[76423],"declarations":[{"constant":false,"id":76423,"mutability":"mutable","name":"router","nameLocation":"12557:6:159","nodeType":"VariableDeclaration","scope":76633,"src":"12541:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76422,"nodeType":"UserDefinedTypeName","pathNode":{"id":76421,"name":"Storage","nameLocations":["12541:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"12541:7:159"},"referencedDeclaration":73677,"src":"12541:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":76426,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76424,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76769,"src":"12566:7:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$73677_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":76425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12566:9:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12541:34:159"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":76428,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76423,"src":"12607:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12614:12:159","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":73676,"src":"12607:19:159","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$77029_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":76430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12627:8:159","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":77024,"src":"12607:28:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":76433,"indexExpression":{"expression":{"id":76431,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12636:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12653:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"12636:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12607:54:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":76434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12665:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12607:59:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":76436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12680:49:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":76427,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12586:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12586:153:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76438,"nodeType":"ExpressionStatement","src":"12586:153:159"},{"assignments":[76441],"declarations":[{"constant":false,"id":76441,"mutability":"mutable","name":"wrappedVaraActor","nameLocation":"12763:16:159","nodeType":"VariableDeclaration","scope":76633,"src":"12750:29:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"},"typeName":{"id":76440,"nodeType":"UserDefinedTypeName","pathNode":{"id":76439,"name":"IWrappedVara","nameLocations":["12750:12:159"],"nodeType":"IdentifierPath","referencedDeclaration":73907,"src":"12750:12:159"},"referencedDeclaration":73907,"src":"12750:12:159","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":76447,"initialValue":{"arguments":[{"expression":{"expression":{"id":76443,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76423,"src":"12795:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12802:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"12795:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":76445,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12816:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":76963,"src":"12795:32:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76442,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73907,"src":"12782:12:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$73907_$","typeString":"type(contract IWrappedVara)"}},"id":76446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12782:46:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"12750:78:159"},{"expression":{"arguments":[{"expression":{"id":76451,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12864:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12881:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"12864:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76453,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12890:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12907:14:159","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":77042,"src":"12890:31:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76448,"name":"wrappedVaraActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76441,"src":"12838:16:159","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$73907","typeString":"contract IWrappedVara"}},"id":76450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12855:8:159","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43107,"src":"12838:25:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":76455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12838:84:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76456,"nodeType":"ExpressionStatement","src":"12838:84:159"},{"assignments":[76459],"declarations":[{"constant":false,"id":76459,"mutability":"mutable","name":"mirrorActor","nameLocation":"12941:11:159","nodeType":"VariableDeclaration","scope":76633,"src":"12933:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"},"typeName":{"id":76458,"nodeType":"UserDefinedTypeName","pathNode":{"id":76457,"name":"IMirror","nameLocations":["12933:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73603,"src":"12933:7:159"},"referencedDeclaration":73603,"src":"12933:7:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"visibility":"internal"}],"id":76464,"initialValue":{"arguments":[{"expression":{"id":76461,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"12963:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12980:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"12963:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76460,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73603,"src":"12955:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$73603_$","typeString":"type(contract IMirror)"}},"id":76463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12955:33:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"12933:55:159"},{"assignments":[76466],"declarations":[{"constant":false,"id":76466,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"13012:16:159","nodeType":"VariableDeclaration","scope":76633,"src":"12999:29:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76465,"name":"bytes","nodeType":"ElementaryTypeName","src":"12999:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76467,"nodeType":"VariableDeclarationStatement","src":"12999:29:159"},{"body":{"id":76513,"nodeType":"Block","src":"13105:270:159","statements":[{"assignments":[76484],"declarations":[{"constant":false,"id":76484,"mutability":"mutable","name":"claim","nameLocation":"13144:5:159","nodeType":"VariableDeclaration","scope":76513,"src":"13119:30:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim"},"typeName":{"id":76483,"nodeType":"UserDefinedTypeName","pathNode":{"id":76482,"name":"Gear.ValueClaim","nameLocations":["13119:4:159","13124:10:159"],"nodeType":"IdentifierPath","referencedDeclaration":77068,"src":"13119:15:159"},"referencedDeclaration":77068,"src":"13119:15:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_storage_ptr","typeString":"struct Gear.ValueClaim"}},"visibility":"internal"}],"id":76489,"initialValue":{"baseExpression":{"expression":{"id":76485,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13152:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13169:11:159","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":77046,"src":"13152:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$77068_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76488,"indexExpression":{"id":76487,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76469,"src":"13181:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13152:31:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"13119:64:159"},{"expression":{"arguments":[{"expression":{"id":76493,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13223:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13229:9:159","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":77063,"src":"13223:15:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76495,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13240:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13246:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":77065,"src":"13240:17:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76497,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13259:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}},"id":76498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13265:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":77067,"src":"13259:11:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76490,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"13198:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13210:12:159","memberName":"valueClaimed","nodeType":"MemberAccess","referencedDeclaration":73584,"src":"13198:24:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128) external"}},"id":76499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13198:73:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76500,"nodeType":"ExpressionStatement","src":"13198:73:159"},{"expression":{"id":76511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76501,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76466,"src":"13286:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76505,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76466,"src":"13318:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76508,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76484,"src":"13357:5:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValueClaim_$77068_calldata_ptr","typeString":"struct Gear.ValueClaim calldata"}],"expression":{"id":76506,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"13336:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13341:15:159","memberName":"valueClaimBytes","nodeType":"MemberAccess","referencedDeclaration":77377,"src":"13336:20:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValueClaim_$77068_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct Gear.ValueClaim memory) pure returns (bytes memory)"}},"id":76509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13336:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":76503,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13305:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76502,"name":"bytes","nodeType":"ElementaryTypeName","src":"13305:5:159","typeDescriptions":{}}},"id":76504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13311:6:159","memberName":"concat","nodeType":"MemberAccess","src":"13305:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13305:59:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13286:78:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76512,"nodeType":"ExpressionStatement","src":"13286:78:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76472,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76469,"src":"13059:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76473,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13063:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13080:11:159","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":77046,"src":"13063:28:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$77068_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.ValueClaim calldata[] calldata"}},"id":76475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13092:6:159","memberName":"length","nodeType":"MemberAccess","src":"13063:35:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13059:39:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76514,"initializationExpression":{"assignments":[76469],"declarations":[{"constant":false,"id":76469,"mutability":"mutable","name":"i","nameLocation":"13052:1:159","nodeType":"VariableDeclaration","scope":76514,"src":"13044:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76468,"name":"uint256","nodeType":"ElementaryTypeName","src":"13044:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76471,"initialValue":{"hexValue":"30","id":76470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13056:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13044:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13100:3:159","subExpression":{"id":76477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76469,"src":"13100:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76479,"nodeType":"ExpressionStatement","src":"13100:3:159"},"nodeType":"ForStatement","src":"13039:336:159"},{"assignments":[76516],"declarations":[{"constant":false,"id":76516,"mutability":"mutable","name":"messagesHashes","nameLocation":"13398:14:159","nodeType":"VariableDeclaration","scope":76633,"src":"13385:27:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":76515,"name":"bytes","nodeType":"ElementaryTypeName","src":"13385:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":76517,"nodeType":"VariableDeclarationStatement","src":"13385:27:159"},{"body":{"id":76590,"nodeType":"Block","src":"13486:624:159","statements":[{"assignments":[76534],"declarations":[{"constant":false,"id":76534,"mutability":"mutable","name":"message","nameLocation":"13522:7:159","nodeType":"VariableDeclaration","scope":76590,"src":"13500:29:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message"},"typeName":{"id":76533,"nodeType":"UserDefinedTypeName","pathNode":{"id":76532,"name":"Gear.Message","nameLocations":["13500:4:159","13505:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":77015,"src":"13500:12:159"},"referencedDeclaration":77015,"src":"13500:12:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_storage_ptr","typeString":"struct Gear.Message"}},"visibility":"internal"}],"id":76539,"initialValue":{"baseExpression":{"expression":{"id":76535,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13532:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13549:8:159","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":77050,"src":"13532:25:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$77015_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":76538,"indexExpression":{"id":76537,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76519,"src":"13558:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13532:28:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"nodeType":"VariableDeclarationStatement","src":"13500:60:159"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":76540,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13579:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13587:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":77014,"src":"13579:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$77034_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13600:2:159","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":77031,"src":"13579:23:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13606:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13579:28:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":76576,"nodeType":"Block","src":"13736:277:159","statements":[{"expression":{"arguments":[{"expression":{"id":76562,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13797:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13805:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":77007,"src":"13797:19:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76564,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13838:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13846:7:159","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":77009,"src":"13838:15:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76566,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13875:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13883:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":77011,"src":"13875:13:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":76568,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13910:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13918:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":77014,"src":"13910:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$77034_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13931:2:159","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":77031,"src":"13910:23:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":76571,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13955:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13963:12:159","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":77014,"src":"13955:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$77034_calldata_ptr","typeString":"struct Gear.ReplyDetails calldata"}},"id":76573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13976:4:159","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":77033,"src":"13955:25:159","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":76559,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"13754:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13766:9:159","memberName":"replySent","nodeType":"MemberAccess","referencedDeclaration":73575,"src":"13754:21:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (address,bytes memory,uint128,bytes32,bytes4) external"}},"id":76574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13754:244:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76575,"nodeType":"ExpressionStatement","src":"13754:244:159"}]},"id":76577,"nodeType":"IfStatement","src":"13575:438:159","trueBody":{"id":76558,"nodeType":"Block","src":"13609:121:159","statements":[{"expression":{"arguments":[{"expression":{"id":76548,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13651:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13659:2:159","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":77005,"src":"13651:10:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76550,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13663:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13671:11:159","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":77007,"src":"13663:19:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76552,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13684:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13692:7:159","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":77009,"src":"13684:15:159","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":76554,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"13701:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}},"id":76555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13709:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":77011,"src":"13701:13:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":76545,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"13627:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13639:11:159","memberName":"messageSent","nodeType":"MemberAccess","referencedDeclaration":73562,"src":"13627:23:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128) external"}},"id":76556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13627:88:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76557,"nodeType":"ExpressionStatement","src":"13627:88:159"}]}},{"expression":{"id":76588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":76578,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76516,"src":"14027:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":76582,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76516,"src":"14057:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":76585,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76534,"src":"14090:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$77015_calldata_ptr","typeString":"struct Gear.Message calldata"}],"expression":{"id":76583,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"14073:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14078:11:159","memberName":"messageHash","nodeType":"MemberAccess","referencedDeclaration":77199,"src":"14073:16:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$77015_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.Message memory) pure returns (bytes32)"}},"id":76586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14073:25:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14044:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76579,"name":"bytes","nodeType":"ElementaryTypeName","src":"14044:5:159","typeDescriptions":{}}},"id":76581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14050:6:159","memberName":"concat","nodeType":"MemberAccess","src":"14044:12:159","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14044:55:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"14027:72:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":76589,"nodeType":"ExpressionStatement","src":"14027:72:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76522,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76519,"src":"13443:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":76523,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"13447:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13464:8:159","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":77050,"src":"13447:25:159","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Message_$77015_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.Message calldata[] calldata"}},"id":76525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13473:6:159","memberName":"length","nodeType":"MemberAccess","src":"13447:32:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13443:36:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76591,"initializationExpression":{"assignments":[76519],"declarations":[{"constant":false,"id":76519,"mutability":"mutable","name":"i","nameLocation":"13436:1:159","nodeType":"VariableDeclaration","scope":76591,"src":"13428:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76518,"name":"uint256","nodeType":"ElementaryTypeName","src":"13428:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76521,"initialValue":{"hexValue":"30","id":76520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13440:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13428:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13481:3:159","subExpression":{"id":76527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76519,"src":"13481:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76529,"nodeType":"ExpressionStatement","src":"13481:3:159"},"nodeType":"ForStatement","src":"13423:687:159"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":76598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":76592,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14124:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14141:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":77040,"src":"14124:26:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":76596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14162:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76595,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14154:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":76594,"name":"address","nodeType":"ElementaryTypeName","src":"14154:7:159","typeDescriptions":{}}},"id":76597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14154:10:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14124:40:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76607,"nodeType":"IfStatement","src":"14120:123:159","trueBody":{"id":76606,"nodeType":"Block","src":"14166:77:159","statements":[{"expression":{"arguments":[{"expression":{"id":76602,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14205:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14222:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":77040,"src":"14205:26:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":76599,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"14180:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14192:12:159","memberName":"setInheritor","nodeType":"MemberAccess","referencedDeclaration":73551,"src":"14180:24:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":76604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14180:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76605,"nodeType":"ExpressionStatement","src":"14180:52:159"}]}},{"expression":{"arguments":[{"expression":{"id":76611,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14277:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14294:12:159","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":77038,"src":"14277:29:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76608,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76459,"src":"14253:11:159","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$73603","typeString":"contract IMirror"}},"id":76610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14265:11:159","memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":73546,"src":"14253:23:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32) external"}},"id":76613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14253:54:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76614,"nodeType":"ExpressionStatement","src":"14253:54:159"},{"expression":{"arguments":[{"expression":{"id":76617,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14363:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14380:7:159","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":77036,"src":"14363:24:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76619,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14401:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14418:12:159","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":77038,"src":"14401:29:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":76621,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14444:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14461:9:159","memberName":"inheritor","nodeType":"MemberAccess","referencedDeclaration":77040,"src":"14444:26:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":76623,"name":"_stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76416,"src":"14484:16:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":76624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14501:14:159","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":77042,"src":"14484:31:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":76626,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76466,"src":"14539:16:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76625,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14529:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14529:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":76629,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76516,"src":"14580:14:159","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76628,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14570:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14570:25:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76615,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77378,"src":"14325:4:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$77378_$","typeString":"type(library Gear)"}},"id":76616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14330:19:159","memberName":"stateTransitionHash","nodeType":"MemberAccess","referencedDeclaration":77253,"src":"14325:24:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,address,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":76631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14325:280:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76420,"id":76632,"nodeType":"Return","src":"14318:287:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_doStateTransition","nameLocation":"12438:18:159","parameters":{"id":76417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76416,"mutability":"mutable","name":"_stateTransition","nameLocation":"12487:16:159","nodeType":"VariableDeclaration","scope":76634,"src":"12457:46:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":76415,"nodeType":"UserDefinedTypeName","pathNode":{"id":76414,"name":"Gear.StateTransition","nameLocations":["12457:4:159","12462:15:159"],"nodeType":"IdentifierPath","referencedDeclaration":77051,"src":"12457:20:159"},"referencedDeclaration":77051,"src":"12457:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$77051_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"src":"12456:48:159"},"returnParameters":{"id":76420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76634,"src":"12522:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12522:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12521:9:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76665,"nodeType":"FunctionDefinition","src":"14618:247:159","nodes":[],"body":{"id":76664,"nodeType":"Block","src":"14690:175:159","nodes":[],"statements":[{"assignments":[76643],"declarations":[{"constant":false,"id":76643,"mutability":"mutable","name":"success","nameLocation":"14705:7:159","nodeType":"VariableDeclaration","scope":76664,"src":"14700:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":76642,"name":"bool","nodeType":"ElementaryTypeName","src":"14700:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":76658,"initialValue":{"arguments":[{"expression":{"id":76650,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14769:3:159","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":76651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14773:6:159","memberName":"sender","nodeType":"MemberAccess","src":"14769:10:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":76654,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14789:4:159","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$76827","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$76827","typeString":"contract Router"}],"id":76653,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14781:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":76652,"name":"address","nodeType":"ElementaryTypeName","src":"14781:7:159","typeDescriptions":{}}},"id":76655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14781:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76656,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76639,"src":"14796:6:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"expression":{"id":76645,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76637,"src":"14722:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14729:13:159","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":73664,"src":"14722:20:159","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$76964_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":76647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14743:11:159","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":76963,"src":"14722:32:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76644,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43140,"src":"14715:6:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$43140_$","typeString":"type(contract IERC20)"}},"id":76648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14715:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43140","typeString":"contract IERC20"}},"id":76649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14756:12:159","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43139,"src":"14715:53:159","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":76657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14715:88:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"14700:103:159"},{"expression":{"arguments":[{"id":76660,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76643,"src":"14822:7:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":76661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14831:26:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":76659,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14814:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14814:44:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76663,"nodeType":"ExpressionStatement","src":"14814:44:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValue","nameLocation":"14627:14:159","parameters":{"id":76640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76637,"mutability":"mutable","name":"router","nameLocation":"14658:6:159","nodeType":"VariableDeclaration","scope":76665,"src":"14642:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76636,"nodeType":"UserDefinedTypeName","pathNode":{"id":76635,"name":"Storage","nameLocations":["14642:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"14642:7:159"},"referencedDeclaration":73677,"src":"14642:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":76639,"mutability":"mutable","name":"_value","nameLocation":"14674:6:159","nodeType":"VariableDeclaration","scope":76665,"src":"14666:14:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":76638,"name":"uint128","nodeType":"ElementaryTypeName","src":"14666:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"14641:40:159"},"returnParameters":{"id":76641,"nodeType":"ParameterList","parameters":[],"src":"14690:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76718,"nodeType":"FunctionDefinition","src":"14871:406:159","nodes":[],"body":{"id":76717,"nodeType":"Block","src":"14957:320:159","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"expression":{"id":76675,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76668,"src":"14975:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14982:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"14975:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15001:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"14975:36:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15012:6:159","memberName":"length","nodeType":"MemberAccess","src":"14975:43:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":76679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15022:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14975:48:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"72656d6f76652070726576696f75732076616c696461746f7273206669727374","id":76681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15025:34:159","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f6a03e209138d575bb162b4e280f18514af00259c854f4d737ad74345b1a440","typeString":"literal_string \"remove previous validators first\""},"value":"remove previous validators first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f6a03e209138d575bb162b4e280f18514af00259c854f4d737ad74345b1a440","typeString":"literal_string \"remove previous validators first\""}],"id":76674,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14967:7:159","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":76682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14967:93:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76683,"nodeType":"ExpressionStatement","src":"14967:93:159"},{"body":{"id":76707,"nodeType":"Block","src":"15120:90:159","statements":[{"expression":{"id":76705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":76695,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76668,"src":"15134:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15141:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15134:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15160:16:159","memberName":"validatorsKeyMap","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"15134:42:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":76703,"indexExpression":{"baseExpression":{"id":76698,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76671,"src":"15177:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":76700,"indexExpression":{"id":76699,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76685,"src":"15189:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15177:14:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15134:58:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":76704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15195:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15134:65:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76706,"nodeType":"ExpressionStatement","src":"15134:65:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76688,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76685,"src":"15091:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":76689,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76671,"src":"15095:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":76690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15107:6:159","memberName":"length","nodeType":"MemberAccess","src":"15095:18:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15091:22:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76708,"initializationExpression":{"assignments":[76685],"declarations":[{"constant":false,"id":76685,"mutability":"mutable","name":"i","nameLocation":"15084:1:159","nodeType":"VariableDeclaration","scope":76708,"src":"15076:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76684,"name":"uint256","nodeType":"ElementaryTypeName","src":"15076:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76687,"initialValue":{"hexValue":"30","id":76686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15088:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15076:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15115:3:159","subExpression":{"id":76692,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76685,"src":"15115:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76694,"nodeType":"ExpressionStatement","src":"15115:3:159"},"nodeType":"ForStatement","src":"15071:139:159"},{"expression":{"id":76715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":76709,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76668,"src":"15220:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15227:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15220:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15246:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"15220:36:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76714,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76671,"src":"15259:11:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"15220:50:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76716,"nodeType":"ExpressionStatement","src":"15220:50:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setValidators","nameLocation":"14880:14:159","parameters":{"id":76672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76668,"mutability":"mutable","name":"router","nameLocation":"14911:6:159","nodeType":"VariableDeclaration","scope":76718,"src":"14895:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76667,"nodeType":"UserDefinedTypeName","pathNode":{"id":76666,"name":"Storage","nameLocations":["14895:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"14895:7:159"},"referencedDeclaration":73677,"src":"14895:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":76671,"mutability":"mutable","name":"_validators","nameLocation":"14936:11:159","nodeType":"VariableDeclaration","scope":76718,"src":"14919:28:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":76669,"name":"address","nodeType":"ElementaryTypeName","src":"14919:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":76670,"nodeType":"ArrayTypeName","src":"14919:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"14894:54:159"},"returnParameters":{"id":76673,"nodeType":"ParameterList","parameters":[],"src":"14957:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76756,"nodeType":"FunctionDefinition","src":"15283:318:159","nodes":[],"body":{"id":76755,"nodeType":"Block","src":"15342:259:159","nodes":[],"statements":[{"body":{"id":76748,"nodeType":"Block","src":"15426:115:159","statements":[{"expression":{"id":76746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"15440:90:159","subExpression":{"baseExpression":{"expression":{"expression":{"id":76737,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15447:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15454:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15447:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15473:16:159","memberName":"validatorsKeyMap","nodeType":"MemberAccess","referencedDeclaration":77060,"src":"15447:42:159","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":76745,"indexExpression":{"baseExpression":{"expression":{"expression":{"id":76740,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15490:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15497:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15490:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15516:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"15490:36:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76744,"indexExpression":{"id":76743,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76725,"src":"15527:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15490:39:159","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15447:83:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76747,"nodeType":"ExpressionStatement","src":"15440:90:159"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76728,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76725,"src":"15372:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"expression":{"id":76729,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15376:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15383:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15376:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15402:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"15376:36:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":76732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15413:6:159","memberName":"length","nodeType":"MemberAccess","src":"15376:43:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15372:47:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76749,"initializationExpression":{"assignments":[76725],"declarations":[{"constant":false,"id":76725,"mutability":"mutable","name":"i","nameLocation":"15365:1:159","nodeType":"VariableDeclaration","scope":76749,"src":"15357:9:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76724,"name":"uint256","nodeType":"ElementaryTypeName","src":"15357:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":76727,"initialValue":{"hexValue":"30","id":76726,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15369:1:159","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15357:13:159"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":76735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15421:3:159","subExpression":{"id":76734,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76725,"src":"15421:1:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":76736,"nodeType":"ExpressionStatement","src":"15421:3:159"},"nodeType":"ForStatement","src":"15352:189:159"},{"expression":{"id":76753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"15551:43:159","subExpression":{"expression":{"expression":{"id":76750,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76721,"src":"15558:6:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":76751,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15565:18:159","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":73668,"src":"15558:25:159","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$77061_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":76752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15584:10:159","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":77056,"src":"15558:36:159","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76754,"nodeType":"ExpressionStatement","src":"15551:43:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeValidators","nameLocation":"15292:17:159","parameters":{"id":76722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76721,"mutability":"mutable","name":"router","nameLocation":"15326:6:159","nodeType":"VariableDeclaration","scope":76756,"src":"15310:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76720,"nodeType":"UserDefinedTypeName","pathNode":{"id":76719,"name":"Storage","nameLocations":["15310:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"15310:7:159"},"referencedDeclaration":73677,"src":"15310:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"15309:24:159"},"returnParameters":{"id":76723,"nodeType":"ParameterList","parameters":[],"src":"15342:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":76769,"nodeType":"FunctionDefinition","src":"15607:192:159","nodes":[],"body":{"id":76768,"nodeType":"Block","src":"15672:127:159","nodes":[],"statements":[{"assignments":[76763],"declarations":[{"constant":false,"id":76763,"mutability":"mutable","name":"slot","nameLocation":"15690:4:159","nodeType":"VariableDeclaration","scope":76768,"src":"15682:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76762,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15682:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76766,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":76764,"name":"_getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76781,"src":"15697:15:159","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":76765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15697:17:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15682:32:159"},{"AST":{"nativeSrc":"15750:43:159","nodeType":"YulBlock","src":"15750:43:159","statements":[{"nativeSrc":"15764:19:159","nodeType":"YulAssignment","src":"15764:19:159","value":{"name":"slot","nativeSrc":"15779:4:159","nodeType":"YulIdentifier","src":"15779:4:159"},"variableNames":[{"name":"router.slot","nativeSrc":"15764:11:159","nodeType":"YulIdentifier","src":"15764:11:159"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":76760,"isOffset":false,"isSlot":true,"src":"15764:11:159","suffix":"slot","valueSize":1},{"declaration":76763,"isOffset":false,"isSlot":false,"src":"15779:4:159","valueSize":1}],"flags":["memory-safe"],"id":76767,"nodeType":"InlineAssembly","src":"15725:68:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_router","nameLocation":"15616:7:159","parameters":{"id":76757,"nodeType":"ParameterList","parameters":[],"src":"15623:2:159"},"returnParameters":{"id":76761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76760,"mutability":"mutable","name":"router","nameLocation":"15664:6:159","nodeType":"VariableDeclaration","scope":76769,"src":"15648:22:159","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":76759,"nodeType":"UserDefinedTypeName","pathNode":{"id":76758,"name":"Storage","nameLocations":["15648:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73677,"src":"15648:7:159"},"referencedDeclaration":73677,"src":"15648:7:159","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$73677_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"15647:24:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76781,"nodeType":"FunctionDefinition","src":"15805:128:159","nodes":[],"body":{"id":76780,"nodeType":"Block","src":"15863:70:159","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":76776,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75290,"src":"15907:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76774,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"15880:11:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44581_$","typeString":"type(library StorageSlot)"}},"id":76775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15892:14:159","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44319,"src":"15880:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44274_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":76777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15880:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44274_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":76778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15921:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44273,"src":"15880:46:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":76773,"id":76779,"nodeType":"Return","src":"15873:53:159"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorageSlot","nameLocation":"15814:15:159","parameters":{"id":76770,"nodeType":"ParameterList","parameters":[],"src":"15829:2:159"},"returnParameters":{"id":76773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76781,"src":"15854:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76771,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15854:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15853:9:159"},"scope":76827,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":76826,"nodeType":"FunctionDefinition","src":"15939:252:159","nodes":[],"body":{"id":76825,"nodeType":"Block","src":"16007:184:159","nodes":[],"statements":[{"assignments":[76789],"declarations":[{"constant":false,"id":76789,"mutability":"mutable","name":"slot","nameLocation":"16025:4:159","nodeType":"VariableDeclaration","scope":76825,"src":"16017:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":76788,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16017:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":76815,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":76814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":76798,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76783,"src":"16077:9:159","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16071:5:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":76796,"name":"bytes","nodeType":"ElementaryTypeName","src":"16071:5:159","typeDescriptions":{}}},"id":76799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16071:16:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76795,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16061:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16061:27:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":76794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16053:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":76793,"name":"uint256","nodeType":"ElementaryTypeName","src":"16053:7:159","typeDescriptions":{}}},"id":76801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16053:36:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":76802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16092:1:159","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16053:40:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":76791,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16042:3:159","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":76792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16046:6:159","memberName":"encode","nodeType":"MemberAccess","src":"16042:10:159","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":76804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16042:52:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":76790,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16032:9:159","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":76805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16032:63:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":76813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"16098:23:159","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":76810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16115:4:159","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":76809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16107:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":76808,"name":"uint256","nodeType":"ElementaryTypeName","src":"16107:7:159","typeDescriptions":{}}},"id":76811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16107:13:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16099:7:159","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":76806,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16099:7:159","typeDescriptions":{}}},"id":76812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16099:22:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16032:89:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"16017:104:159"},{"expression":{"id":76823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":76819,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":75290,"src":"16158:12:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":76816,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44581,"src":"16131:11:159","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44581_$","typeString":"type(library StorageSlot)"}},"id":76818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16143:14:159","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44319,"src":"16131:26:159","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44274_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":76820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16131:40:159","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44274_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":76821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16172:5:159","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44273,"src":"16131:46:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":76822,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76789,"src":"16180:4:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16131:53:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":76824,"nodeType":"ExpressionStatement","src":"16131:53:159"}]},"implemented":true,"kind":"function","modifiers":[{"id":76786,"kind":"modifierInvocation","modifierName":{"id":76785,"name":"onlyOwner","nameLocations":["15997:9:159"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"15997:9:159"},"nodeType":"ModifierInvocation","src":"15997:9:159"}],"name":"_setStorageSlot","nameLocation":"15948:15:159","parameters":{"id":76784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76783,"mutability":"mutable","name":"namespace","nameLocation":"15978:9:159","nodeType":"VariableDeclaration","scope":76826,"src":"15964:23:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76782,"name":"string","nodeType":"ElementaryTypeName","src":"15964:6:159","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"15963:25:159"},"returnParameters":{"id":76787,"nodeType":"ParameterList","parameters":[],"src":"16007:0:159"},"scope":76827,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":75282,"name":"IRouter","nameLocations":["767:7:159"],"nodeType":"IdentifierPath","referencedDeclaration":73896,"src":"767:7:159"},"id":75283,"nodeType":"InheritanceSpecifier","src":"767:7:159"},{"baseName":{"id":75284,"name":"OwnableUpgradeable","nameLocations":["776:18:159"],"nodeType":"IdentifierPath","referencedDeclaration":39387,"src":"776:18:159"},"id":75285,"nodeType":"InheritanceSpecifier","src":"776:18:159"},{"baseName":{"id":75286,"name":"ReentrancyGuardTransient","nameLocations":["796:24:159"],"nodeType":"IdentifierPath","referencedDeclaration":44045,"src":"796:24:159"},"id":75287,"nodeType":"InheritanceSpecifier","src":"796:24:159"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[76827,44045,39387,40535,39641,73896],"name":"Router","nameLocation":"757:6:159","scope":76828,"usedErrors":[39223,39228,39404,39407,43912,43918,43989,44912,44917,44922],"usedEvents":[39234,39412,73682,73689,73696,73703,73710,73713,73716]}],"license":"UNLICENSED"},"id":159} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"areValidators","inputs":[{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum Gear.CodeState"}],"stateMutability":"view"},{"type":"function","name":"codesStates","inputs":[{"name":"_codesIds","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint8[]","internalType":"enum Gear.CodeState[]"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"_blockCommitments","type":"tuple[]","internalType":"struct Gear.BlockCommitment[]","components":[{"name":"hash","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint48","internalType":"uint48"},{"name":"previousCommittedBlock","type":"bytes32","internalType":"bytes32"},{"name":"predecessorBlock","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct Gear.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"inheritor","type":"address","internalType":"address"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct Gear.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct Gear.Message[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct Gear.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"_codeCommitments","type":"tuple[]","internalType":"struct Gear.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"_signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitValidators","inputs":[{"name":"commitment","type":"tuple","internalType":"struct Gear.ValidatorsCommitment","components":[{"name":"validators","type":"address[]","internalType":"address[]"},{"name":"eraIndex","type":"uint256","internalType":"uint256"}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeSettings","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Gear.ComputationSettings","components":[{"name":"threshold","type":"uint64","internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","internalType":"uint128"}]}],"stateMutability":"view"},{"type":"function","name":"createProgram","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"createProgramWithDecoder","inputs":[{"name":"_decoderImpl","type":"address","internalType":"address"},{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"genesisTimestamp","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_eraDuration","type":"uint256","internalType":"uint256"},{"name":"_electionDuration","type":"uint256","internalType":"uint256"},{"name":"_validators","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isValidator","inputs":[{"name":"_validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"latestCommittedBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"lookupGenesisHash","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mirrorImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxyImpl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"_programId","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCodeIds","inputs":[{"name":"_programsIds","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"_codeId","type":"bytes32","internalType":"bytes32"},{"name":"_blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"newMirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BlockCommitted","inputs":[{"name":"hash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ComputationSettingsChanged","inputs":[{"name":"threshold","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"wvaraPerSecond","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"NextEraValidatorsCommitted","inputs":[{"name":"startTimestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460aa575f516020612e715f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051612dc290816100af8239f35b6001600160401b0319166001600160401b039081175f516020612e715f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081627a32e7146121415750806301b1d15614611a035780631c149d8a146118aa57806328e24b3d146118805780633d43b4181461182e578063527de0f9146117ac57806365ecfea2146117735780636c2eb3501461148c578063715018a61461142357806382bdeaad1461130b57806384d22a4f146112a257806388f50cf0146112695780638b1edf1e146111a25780638da5cb5b1461116d5780638f381dbe146111275780639067088e146110de57806396a2ddfa146110b0578063aaf0fe6a14610d13578063b1669a3314610865578063baaf020114610768578063c13911e814610724578063c9f16a11146106f6578063ca1e781914610675578063cacf66ab1461063d578063e6fabc0914610604578063e7006a74146104e3578063e97d3eb3146102b0578063ed612f8c1461027a578063edc8722514610231578063efd81abc146101ff578063f2fde38b146101d25763facd743b1461017d575f80fd5b346101cf5760203660031901126101cf576101966121b1565b6101ad5f516020612d4d5f395f51905f52546128d5565b9060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b80fd5b50346101cf5760203660031901126101cf576101fc6101ef6121b1565b6101f7612729565b61254b565b80f35b50346101cf57806003193601126101cf57602061ffff60075f516020612d4d5f395f51905f5254015416604051908152f35b50346101cf57806003193601126101cf5760206102725f516020612d4d5f395f51905f525461ffff60076001610266846128d5565b01549201541690612a22565b604051908152f35b50346101cf57806003193601126101cf57602060016102a65f516020612d4d5f395f51905f52546128d5565b0154604051908152f35b50346101cf5760403660031901126101cf57600435906001600160401b0382116101cf57366023830112156101cf578160040135916001600160401b0383116104df573660248460061b830101116104df576024356001600160401b0381116104db57906103238492369060040161216b565b935f516020612d4d5f395f51905f525492610340845415156121e8565b606095829360118601975b878610156104be578560061b84016024810135918287528a60205260ff60408820541660038110156104aa57600103610447576001926103fa6044610427940161039481612530565b1561042f57828a528d60205260408a20600260ff1982541617905560148c016103bd815461253d565b90555b6103c981612530565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020604051868152a2612530565b6040519060208201928352151560f81b60408201526021815261041e6041826122a4565b519020906122c5565b95019461034b565b828a528d60205260408a2060ff1981541690556103c0565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b88526021600452602488fd5b84926101fc92886104d69360208151910120906125cf565b6122f4565b8280fd5b5080fd5b50346101cf5760603660031901126101cf576104fd6121b1565b6024359061054560443591610512838561275c565b9360405193602085019182526040850152604084526105326060856122a4565b92519092206001600160a01b0392612c47565b16803b156104db5760405163189acdbd60e31b81526001600160a01b0390921660048301819052918390818160248183875af180156105f9576105e4575b5050813b156104db576040519063485cc95560e01b82523360048301526024820152828160448183865af180156105d9576105c4575b602082604051908152f35b6105cf8380926122a4565b6104df57816105b9565b6040513d85823e3d90fd5b816105ee916122a4565b6104db57825f610583565b6040513d84823e3d90fd5b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f5254600401546040516001600160a01b039091168152602090f35b50346101cf57806003193601126101cf57602065ffffffffffff60015f516020612d4d5f395f51905f52540154821c16604051908152f35b50346101cf57806003193601126101cf576106a860016106a25f516020612d4d5f395f51905f52546128d5565b01612340565b90604051918291602083016020845282518091526020604085019301915b8181106106d4575050500390f35b82516001600160a01b03168452859450602093840193909201916001016106c6565b50346101cf57806003193601126101cf57602060025f516020612d4d5f395f51905f52540154604051908152f35b50346101cf5760203660031901126101cf5760ff604060209260115f516020612d4d5f395f51905f5254016004358252845220541661076660405180926121db565bf35b50346101cf5760203660031901126101cf576004356001600160401b0381116104df5761079990369060040161216b565b905f516020612d4d5f395f51905f5254906107b383612391565b916107c160405193846122a4565b8383526107cd84612391565b602084019490601f19013686376012869201915b81811061082c57868587604051928392602084019060208552518091526040840192915b818110610813575050500390f35b8251845285945060209384019390920191600101610805565b8061084261083d60019385886123a8565b6123f8565b828060a01b03165f528360205260405f205461085e82886123cc565b52016107e1565b50346101cf5760e03660031901126101cf5761087f6121b1565b6024356001600160a01b03811691908290036104db576044356001600160a01b0381169290839003610d0f576064356001600160a01b0381169190829003610d0b576084359160a43560c4356001600160401b038111610d07576108e790369060040161216b565b9490925f516020612d6d5f395f51905f52549660ff8860401c1615976001600160401b03811680159081610cff575b6001149081610cf5575b159081610cec575b50610cdd5767ffffffffffffffff1981166001175f516020612d6d5f395f51905f5255610967919089610cb1575b5061095f612b82565b6101f7612b82565b4215610c5b578215610c055782821115610ba457604097885161098a8a826122a4565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526109be612729565b5190205f198101908111610b905792610b3697969592600895928b610b2f966109f48251926020840192835260208452836122a4565b60ff19915190201697885f516020612d4d5f395f51905f52558c610a16612890565b80518b5560018b019169ffffffffffff0000000063ffffffff60208401511691845493015160201b169169ffffffffffffffffffff191617179055828d8051610a5e81612289565b8381526020810185905201526004890180546001600160a01b03199081166001600160a01b039384161790915560058a018054821693831693909317909255600689018054909216921691909117905560078601805461ffff1916611a0a179055610ac76123e0565b506509184e72a00060208b51610adc8161225a565b639502f90081520152600e860180546001600160c01b0319166d09184e72a000000000009502f90017905589518290602090610b178161225a565b8381520152600f8601556010850155429436916124a7565b91016128ef565b610b3e575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020612d6d5f395f51905f5254165f516020612d6d5f395f51905f52555160018152a180f35b634e487b7160e01b8b52601160045260248bfd5b60405162461bcd60e51b815260206004820152603360248201527f657261206475726174696f6e206d757374206265206772656174657220746861604482015272371032b632b1ba34b7b710323ab930ba34b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f656c656374696f6e206475726174696f6e206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f63757272656e742074696d657374616d70206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b68ffffffffffffffffff191668010000000000000001175f516020612d6d5f395f51905f52555f610956565b63f92ee8a960e01b8b5260048bfd5b9050155f610928565b303b159150610920565b8a9150610916565b8780fd5b8480fd5b8380fd5b50346101cf5760403660031901126101cf57600435906001600160401b0382116101cf5781600401604060031984360301126104df576024356001600160401b0381116104db57610d6890369060040161216b565b91905f516020612d4d5f395f51905f52549265ffffffffffff600185015460201c1691610d958342612473565b94600f81015495861561109c5786900495602489013596600181018091116110885787036110305786610dc791612494565b840180941161101c57610dde601082015485612473565b4210610fd757610ded81612a08565b954260028801541015610f775760405198610e078a61225a565b8635906001600160401b038211610f73570136602382011215610f6f576020610e3b839236906024600482013591016124a7565b9a8b8152015260405160208101918260208c51919c01908b5b818110610f50575050506020828c610e7a93610e9f9a9b9c9d9e520380845201826122a4565b5190206040516020810191825260208152610e966040826122a4565b519020906125cf565b15610ef057610ee6817f41e7f919bf726af8aa2ef36bd31905a693013e30c45c6284060e613d4941997b94610ee0610ed9866020976124fb565b36916124a7565b906128ef565b604051908152a180f35b60405162461bcd60e51b815260206004820152603260248201527f6e657874206572612076616c696461746f7273207369676e6174757265732076604482015271195c9a599a58d85d1a5bdb8819985a5b195960721b6064820152608490fd5b82516001600160a01b03168e5260209d8e019d90920191600101610e54565b8880fd5b8980fd5b60405162461bcd60e51b815260206004820152603260248201527f6c6f6f6b73206c696b652076616c696461746f727320666f72206e65787420656044820152711c9848185c9948185b1c9958591e481cd95d60721b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f656c656374696f6e206973206e6f7420796574207374617274656400000000006044820152606490fd5b634e487b7160e01b87526011600452602487fd5b60405162461bcd60e51b815260206004820152602a60248201527f636f6d6d69746d656e742065726120696e646578206973206e6f74206e657874604482015269040cae4c240d2dcc8caf60b31b6064820152608490fd5b634e487b7160e01b89526011600452602489fd5b634e487b7160e01b88526012600452602488fd5b50346101cf57806003193601126101cf57602060135f516020612d4d5f395f51905f52540154604051908152f35b50346101cf5760203660031901126101cf576110f86121b1565b60125f516020612d4d5f395f51905f5254019060018060a01b03165f52602052602060405f2054604051908152f35b50346101cf5760203660031901126101cf57600435906001600160401b0382116101cf57602061116361115d366004860161216b565b9061240c565b6040519015158152f35b50346101cf57806003193601126101cf575f516020612d2d5f395f51905f52546040516001600160a01b039091168152602090f35b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f525480546112245763ffffffff600182015416409081156111df575580f35b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346101cf57806003193601126101cf576112bb6123e0565b506040600e5f516020612d4d5f395f51905f5254016001600160801b038251916112e48361225a565b548160206001600160401b038316948581520191851c168152835192835251166020820152f35b50346101cf5760203660031901126101cf576004356001600160401b0381116104df5761133c90369060040161216b565b905f516020612d4d5f395f51905f52549061135683612391565b9161136460405193846122a4565b83835261137084612391565b602084019490601f19013686376011869201915b8181106113d957868587604051928392602084019060208552518091526040840192915b8181106113b6575050500390f35b91935091602080826113cb60019488516121db565b0194019101918493926113a8565b6113e48183866123a8565b3587528260205260ff6040882054166113fd82876123cc565b600382101561140f5752600101611384565b634e487b7160e01b89526021600452602489fd5b50346101cf57806003193601126101cf5761143c612729565b5f516020612d2d5f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101cf57806003193601126101cf576114a5612729565b5f516020612d6d5f395f51905f525460ff8160401c16801561175f575b61175057680100000000000000029068ffffffffffffffffff1916175f516020612d6d5f395f51905f52555f516020612d4d5f395f51905f5254604090815161150b83826122a4565b6017815260208101907f726f757465722e73746f726167652e526f757465725632000000000000000000825261153f612729565b5190205f19810190811161173c57916020917fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29382519084820190815284825261158984836122a4565b60ff19915190201690815f516020612d4d5f395f51905f52556115aa612890565b80518355600183019063ffffffff868201511669ffffffffffff00000000868454930151881b169169ffffffffffffffffffff1916171790556004810160048301908082036116ee575b505061ffff600782015416600783019061ffff19825416179055611630600161161c836128d5565b016116274291612340565b600885016128ef565b600e8101600e83019080820361169c575b5050600f8101600f830191818303611686575b5050505060ff60401b195f516020612d6d5f395f51905f5254165f516020612d6d5f395f51905f52555160028152a180f35b601092839254905501549101555f808080611654565b806001600160401b03806001600160801b03935416166001600160401b031984541617835554851c16600160401b600160c01b03825491861b1690600160401b600160c01b0319161790555f80611641565b5481546001600160a01b03199081166001600160a01b039283161790925560058381015490850180548416918316919091179055600680840154908501805490931691161790555f806115f4565b634e487b7160e01b84526011600452602484fd5b63f92ee8a960e01b8252600482fd5b5060026001600160401b03821610156114c2565b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f5254600501546040516001600160a01b039091168152602090f35b3461182a576117cc6117bd3661219b565b6001600160a01b03929161275c565b16803b1561182a576040519063485cc95560e01b82523360048301525f60248301525f8260448183855af191821561181f5760209261180f575b50604051908152f35b5f611819916122a4565b5f611806565b6040513d5f823e3d90fd5b5f80fd5b3461182a57602036600319011261182a576118476121b1565b61184f612729565b5f516020612d4d5f395f51905f525460040180546001600160a01b0319166001600160a01b03909216919091179055005b3461182a575f36600319011261182a5760205f516020612d4d5f395f51905f525454604051908152f35b3461182a576118b83661219b565b9081158015906119f9575b156119be5760115f516020612d4d5f395f51905f52546118e5815415156121e8565b0190805f528160205260ff60405f20541660038110156119aa57611949577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b60405162461bcd60e51b8152602060048201526013602482015272189b1bd88818d85b89dd08189948199bdd5b99606a1b6044820152606490fd5b505f4915156118c3565b3461182a57604036600319011261182a576004356001600160401b03811161182a57611a3390369060040161216b565b6024356001600160401b03811161182a57611a5290369060040161216b565b90927f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6121325760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f516020612d4d5f395f51905f525491611aba835415156121e8565b60605f915b858310156120f6578260051b840135609e198536030181121561182a5784019060028601546040830135036120a357611afb6060830135612a44565b1561204f57949396959291906020611b148183016125bc565b65ffffffffffff60405191611b288361225a565b843583521691829101528135600287015565ffffffffffff19600387015416176003860155611b5a60808201826124fb565b9690946060995f925b89841015611fac578360051b88013560be198936030181121561182a5788019b611b8c8d6123f8565b6001600160a01b03165f90815260128b01602052604090205415611f4f5760068a01548d906001600160a01b03166060611bc5836123f8565b92019182356001600160801b03811680910361182a5760405163a9059cbb60e01b81526001600160a01b039092166004830152602482015290602090829060449082905f905af1801561181f57611f19575b506001600160a01b03611c298f6123f8565b6040516309ed323560e41b8152602060048201529f9116918f919060e48301906001600160801b0390611c96906001600160a01b03611c67866121c7565b166024870152602085013560448701526001600160a01b03611c8b604087016121c7565b166064870152612a87565b16608484015236829003601e19019060808301358281121561182a57830190602082359201946001600160401b03831161182a57606083023603861361182a57826101049260c060a4840152520193905f905b808210611ecf575050509e9f939495969798999a9b9c9d9e60a08201359081121561182a570190813560208301926001600160401b03821161182a578160051b91823603851361182a578684036023190160c48801528084528694928401602090810194908101925f923682900360de19019290915b828510611dd6575050505050505091815f8160209503925af190811561181f575f91611da4575b50611d93906001926122c5565b9b9a99989796959401929190611b63565b90506020813d8211611dce575b81611dbe602093836122a4565b8101031261182a57516001611d86565b3d9150611db1565b9193959750919395601f1983820301875287358581121561182a57820160208101358252906001600160a01b03611e0f604084016121c7565b1660208201526060820135603e19368490030181121561182a5782602091010191602083359301906001600160401b03841161182a57833603821361182a578360c092836040860152818486015260e08501375f60e085850101526001600160801b03611e7e60808301612a87565b16606084015260a0810135608084015201359163ffffffff60e01b831680930361182a5760e0826020939260019560a086950152601f80199101160101990197019501929091899796959492611d5f565b90919460608060019288358152838060a01b03611eee60208b016121c7565b1660208201526001600160801b03611f0860408b01612a87565b166040820152019601920190611ce9565b6020813d8211611f47575b81611f31602093836122a4565b8101031261182a57518015158114611c17575f80fd5b3d9150611f24565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b96509697509793986001939150916120469260208151910120907fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e602060405183358152a1611ffd602082016125bc565b9160606040519260208401948135865265ffffffffffff60d01b9060d01b166040850152604081013560468501520135606683015260868201526086815261041e60a6826122a4565b91960191611abf565b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b604482015264040d0c2e6d60db1b6064820152608490fd5b6104d690878661210d9460208151910120906125cf565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b3461182a575f36600319011261182a5760209060145f516020612d4d5f395f51905f525401548152f35b9181601f8401121561182a578235916001600160401b03831161182a576020808501948460051b01011161182a57565b604090600319011261182a576004359060243590565b600435906001600160a01b038216820361182a57565b35906001600160a01b038216820361182a57565b9060038210156119aa5752565b156121ef57565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b604081019081106001600160401b0382111761227557604052565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b0382111761227557604052565b90601f801991011681019081106001600160401b0382111761227557604052565b6020806122f2928195946040519682889351918291018585015e82019083820152030180855201836122a4565b565b156122fb57565b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b90604051918281549182825260208201905f5260205f20925f5b81811061236f5750506122f2925003836122a4565b84546001600160a01b031683526001948501948794506020909301920161235a565b6001600160401b0381116122755760051b60200190565b91908110156123b85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b80518210156123b85760209160051b010190565b604051906123ed8261225a565b5f6020838281520152565b356001600160a01b038116810361182a5790565b6124235f516020612d4d5f395f51905f52546128d5565b905f5b8381106124365750505050600190565b61244461083d8286856123a8565b6001600160a01b03165f9081526020849052604090205460ff161561246b57600101612426565b505050505f90565b9190820391821161248057565b634e487b7160e01b5f52601160045260245ffd5b8181029291811591840414171561248057565b9291906124b381612391565b936124c160405195866122a4565b602085838152019160051b810192831161182a57905b8282106124e357505050565b602080916124f0846121c7565b8152019101906124d7565b903590601e198136030182121561182a57018035906001600160401b03821161182a57602001918160051b3603831361182a57565b35801515810361182a5790565b5f1981146124805760010190565b6001600160a01b031680156125a9575f516020612d2d5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff8116810361182a5790565b9190916125f36125de826128d5565b9161ffff600760018501549201541690612a22565b9260405190602082019081526020825261260e6040836122a4565b61264a603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f1981018352826122a4565b5190205f925f5b8681101561271e578060051b820135601e198336030181121561182a5782018035906001600160401b03821161182a576020810190823603821361182a57604051906126a7601f8501601f1916602001836122a4565b838252602084369201011161182a575f6020846126d9956126d095838601378301015285612bad565b90929192612be7565b6001600160a01b03165f9081526020859052604090205460ff16612700575b600101612651565b9361270a9061253d565b938585036126f85750505050505050600190565b505050505050505f90565b5f516020612d2d5f395f51905f52546001600160a01b0316330361274957565b63118cdaa760e01b5f523360045260245ffd5b5f516020612d4d5f395f51905f525491612778835415156121e8565b815f526011830160205260ff60405f20541660038110156119aa57600203612834576127d660139160018060a01b036005860154169060405160208101918683526040820152604081526127cd6060826122a4565b51902090612c47565b9260018060a01b0384165f52601281016020528260405f2055016127fa815461253d565b90556040516001600160a01b03831681527f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a290565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f6040805161289e81612289565b82815282602082015201526040516128b581612289565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b6128de81612a9b565b156128e957600b0190565b60080190565b905f5b6001830190815481101561292f575f91825260208083208201546001600160a01b031683528490526040909120805460ff191690556001016128f2565b50505f5b8151811015612974576001906001600160a01b0361295182856123cc565b5116828060a01b03165f528360205260405f208260ff1982541617905501612933565b50600182018151916001600160401b038311612275576801000000000000000083116122755781548383558084106129e2575b50602001905f5260205f205f5b8381106129c5575050505060020155565b82516001600160a01b0316818301556020909201916001016129b4565b825f528360205f2091820191015b8181106129fd57506129a7565b5f81556001016129f0565b612a1181612a9b565b15612a1c5760080190565b600b0190565b61ffff612a30921690612494565b61270f810180911161248057612710900490565b905f19430143811161248057805b612a5d575b505f9150565b8040838103612a6e57506001925050565b15612a82578015612480575f190180612a52565b612a57565b35906001600160801b038216820361182a57565b600d600a820154910154808214612b3e5780821091421090811590421015918190612b37575b15612ad65782612ad057505090565b14919050565b60405162461bcd60e51b815260206004820152603360248201527f636f756c64206e6f74206964656e746966792076616c696461746f727320666f6044820152720722063757272656e742074696d657374616d7606c1b6064820152608490fd5b5081612ac1565b606460405162461bcd60e51b815260206004820152602060248201527f657261732074696d657374616d70206d757374206e6f7420626520657175616c6044820152fd5b60ff5f516020612d6d5f395f51905f525460401c1615612b9e57565b631afcd79f60e31b5f5260045ffd5b8151919060418303612bdd57612bd69250602082015190606060408401519301515f1a90612caa565b9192909190565b50505f9160029190565b60048110156119aa5780612bf9575050565b60018103612c105763f645eedf60e01b5f5260045ffd5b60028103612c2b575063fce698f760e01b5f5260045260245ffd5b600314612c355750565b6335e2f38360e21b5f5260045260245ffd5b6e5af43d82803e903d91602b57fd5bf390763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b17602052603760095ff5906001600160a01b03821615612c9b57565b63b06ebf3d60e01b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612d21579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561181f575f516001600160a01b03811615612d1757905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220f66e3e1bc4037348273211a9406000b46d6c209d6dcb3083248113c6033f9a2b64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"690:16205:120:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;690:16205:120;;7985:34:25;7981:146;;-1:-1:-1;690:16205:120;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;690:16205:120;-1:-1:-1;;;;;690:16205:120;;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;8087:29:25;;690:16205:120;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;690:16205:120;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080806040526004361015610012575f80fd5b5f905f3560e01c9081627a32e7146121415750806301b1d15614611a035780631c149d8a146118aa57806328e24b3d146118805780633d43b4181461182e578063527de0f9146117ac57806365ecfea2146117735780636c2eb3501461148c578063715018a61461142357806382bdeaad1461130b57806384d22a4f146112a257806388f50cf0146112695780638b1edf1e146111a25780638da5cb5b1461116d5780638f381dbe146111275780639067088e146110de57806396a2ddfa146110b0578063aaf0fe6a14610d13578063b1669a3314610865578063baaf020114610768578063c13911e814610724578063c9f16a11146106f6578063ca1e781914610675578063cacf66ab1461063d578063e6fabc0914610604578063e7006a74146104e3578063e97d3eb3146102b0578063ed612f8c1461027a578063edc8722514610231578063efd81abc146101ff578063f2fde38b146101d25763facd743b1461017d575f80fd5b346101cf5760203660031901126101cf576101966121b1565b6101ad5f516020612d4d5f395f51905f52546128d5565b9060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b80fd5b50346101cf5760203660031901126101cf576101fc6101ef6121b1565b6101f7612729565b61254b565b80f35b50346101cf57806003193601126101cf57602061ffff60075f516020612d4d5f395f51905f5254015416604051908152f35b50346101cf57806003193601126101cf5760206102725f516020612d4d5f395f51905f525461ffff60076001610266846128d5565b01549201541690612a22565b604051908152f35b50346101cf57806003193601126101cf57602060016102a65f516020612d4d5f395f51905f52546128d5565b0154604051908152f35b50346101cf5760403660031901126101cf57600435906001600160401b0382116101cf57366023830112156101cf578160040135916001600160401b0383116104df573660248460061b830101116104df576024356001600160401b0381116104db57906103238492369060040161216b565b935f516020612d4d5f395f51905f525492610340845415156121e8565b606095829360118601975b878610156104be578560061b84016024810135918287528a60205260ff60408820541660038110156104aa57600103610447576001926103fa6044610427940161039481612530565b1561042f57828a528d60205260408a20600260ff1982541617905560148c016103bd815461253d565b90555b6103c981612530565b15157f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c96020604051868152a2612530565b6040519060208201928352151560f81b60408201526021815261041e6041826122a4565b519020906122c5565b95019461034b565b828a528d60205260408a2060ff1981541690556103c0565b60405162461bcd60e51b815260206004820152603560248201527f636f6465206d7573742062652072657175657374656420666f722076616c6964604482015274185d1a5bdb881d1bc818994818dbdb5b5a5d1d1959605a1b6064820152608490fd5b634e487b7160e01b88526021600452602488fd5b84926101fc92886104d69360208151910120906125cf565b6122f4565b8280fd5b5080fd5b50346101cf5760603660031901126101cf576104fd6121b1565b6024359061054560443591610512838561275c565b9360405193602085019182526040850152604084526105326060856122a4565b92519092206001600160a01b0392612c47565b16803b156104db5760405163189acdbd60e31b81526001600160a01b0390921660048301819052918390818160248183875af180156105f9576105e4575b5050813b156104db576040519063485cc95560e01b82523360048301526024820152828160448183865af180156105d9576105c4575b602082604051908152f35b6105cf8380926122a4565b6104df57816105b9565b6040513d85823e3d90fd5b816105ee916122a4565b6104db57825f610583565b6040513d84823e3d90fd5b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f5254600401546040516001600160a01b039091168152602090f35b50346101cf57806003193601126101cf57602065ffffffffffff60015f516020612d4d5f395f51905f52540154821c16604051908152f35b50346101cf57806003193601126101cf576106a860016106a25f516020612d4d5f395f51905f52546128d5565b01612340565b90604051918291602083016020845282518091526020604085019301915b8181106106d4575050500390f35b82516001600160a01b03168452859450602093840193909201916001016106c6565b50346101cf57806003193601126101cf57602060025f516020612d4d5f395f51905f52540154604051908152f35b50346101cf5760203660031901126101cf5760ff604060209260115f516020612d4d5f395f51905f5254016004358252845220541661076660405180926121db565bf35b50346101cf5760203660031901126101cf576004356001600160401b0381116104df5761079990369060040161216b565b905f516020612d4d5f395f51905f5254906107b383612391565b916107c160405193846122a4565b8383526107cd84612391565b602084019490601f19013686376012869201915b81811061082c57868587604051928392602084019060208552518091526040840192915b818110610813575050500390f35b8251845285945060209384019390920191600101610805565b8061084261083d60019385886123a8565b6123f8565b828060a01b03165f528360205260405f205461085e82886123cc565b52016107e1565b50346101cf5760e03660031901126101cf5761087f6121b1565b6024356001600160a01b03811691908290036104db576044356001600160a01b0381169290839003610d0f576064356001600160a01b0381169190829003610d0b576084359160a43560c4356001600160401b038111610d07576108e790369060040161216b565b9490925f516020612d6d5f395f51905f52549660ff8860401c1615976001600160401b03811680159081610cff575b6001149081610cf5575b159081610cec575b50610cdd5767ffffffffffffffff1981166001175f516020612d6d5f395f51905f5255610967919089610cb1575b5061095f612b82565b6101f7612b82565b4215610c5b578215610c055782821115610ba457604097885161098a8a826122a4565b6017815260208101907f726f757465722e73746f726167652e526f75746572563100000000000000000082526109be612729565b5190205f198101908111610b905792610b3697969592600895928b610b2f966109f48251926020840192835260208452836122a4565b60ff19915190201697885f516020612d4d5f395f51905f52558c610a16612890565b80518b5560018b019169ffffffffffff0000000063ffffffff60208401511691845493015160201b169169ffffffffffffffffffff191617179055828d8051610a5e81612289565b8381526020810185905201526004890180546001600160a01b03199081166001600160a01b039384161790915560058a018054821693831693909317909255600689018054909216921691909117905560078601805461ffff1916611a0a179055610ac76123e0565b506509184e72a00060208b51610adc8161225a565b639502f90081520152600e860180546001600160c01b0319166d09184e72a000000000009502f90017905589518290602090610b178161225a565b8381520152600f8601556010850155429436916124a7565b91016128ef565b610b3e575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f516020612d6d5f395f51905f5254165f516020612d6d5f395f51905f52555160018152a180f35b634e487b7160e01b8b52601160045260248bfd5b60405162461bcd60e51b815260206004820152603360248201527f657261206475726174696f6e206d757374206265206772656174657220746861604482015272371032b632b1ba34b7b710323ab930ba34b7b760691b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f656c656374696f6e206475726174696f6e206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f63757272656e742074696d657374616d70206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b68ffffffffffffffffff191668010000000000000001175f516020612d6d5f395f51905f52555f610956565b63f92ee8a960e01b8b5260048bfd5b9050155f610928565b303b159150610920565b8a9150610916565b8780fd5b8480fd5b8380fd5b50346101cf5760403660031901126101cf57600435906001600160401b0382116101cf5781600401604060031984360301126104df576024356001600160401b0381116104db57610d6890369060040161216b565b91905f516020612d4d5f395f51905f52549265ffffffffffff600185015460201c1691610d958342612473565b94600f81015495861561109c5786900495602489013596600181018091116110885787036110305786610dc791612494565b840180941161101c57610dde601082015485612473565b4210610fd757610ded81612a08565b954260028801541015610f775760405198610e078a61225a565b8635906001600160401b038211610f73570136602382011215610f6f576020610e3b839236906024600482013591016124a7565b9a8b8152015260405160208101918260208c51919c01908b5b818110610f50575050506020828c610e7a93610e9f9a9b9c9d9e520380845201826122a4565b5190206040516020810191825260208152610e966040826122a4565b519020906125cf565b15610ef057610ee6817f41e7f919bf726af8aa2ef36bd31905a693013e30c45c6284060e613d4941997b94610ee0610ed9866020976124fb565b36916124a7565b906128ef565b604051908152a180f35b60405162461bcd60e51b815260206004820152603260248201527f6e657874206572612076616c696461746f7273207369676e6174757265732076604482015271195c9a599a58d85d1a5bdb8819985a5b195960721b6064820152608490fd5b82516001600160a01b03168e5260209d8e019d90920191600101610e54565b8880fd5b8980fd5b60405162461bcd60e51b815260206004820152603260248201527f6c6f6f6b73206c696b652076616c696461746f727320666f72206e65787420656044820152711c9848185c9948185b1c9958591e481cd95d60721b6064820152608490fd5b60405162461bcd60e51b815260206004820152601b60248201527f656c656374696f6e206973206e6f7420796574207374617274656400000000006044820152606490fd5b634e487b7160e01b87526011600452602487fd5b60405162461bcd60e51b815260206004820152602a60248201527f636f6d6d69746d656e742065726120696e646578206973206e6f74206e657874604482015269040cae4c240d2dcc8caf60b31b6064820152608490fd5b634e487b7160e01b89526011600452602489fd5b634e487b7160e01b88526012600452602488fd5b50346101cf57806003193601126101cf57602060135f516020612d4d5f395f51905f52540154604051908152f35b50346101cf5760203660031901126101cf576110f86121b1565b60125f516020612d4d5f395f51905f5254019060018060a01b03165f52602052602060405f2054604051908152f35b50346101cf5760203660031901126101cf57600435906001600160401b0382116101cf57602061116361115d366004860161216b565b9061240c565b6040519015158152f35b50346101cf57806003193601126101cf575f516020612d2d5f395f51905f52546040516001600160a01b039091168152602090f35b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f525480546112245763ffffffff600182015416409081156111df575580f35b60405162461bcd60e51b815260206004820152601d60248201527f756e61626c6520746f206c6f6f6b75702067656e6573697320686173680000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f67656e65736973206861736820616c72656164792073657400000000000000006044820152606490fd5b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f5254600601546040516001600160a01b039091168152602090f35b50346101cf57806003193601126101cf576112bb6123e0565b506040600e5f516020612d4d5f395f51905f5254016001600160801b038251916112e48361225a565b548160206001600160401b038316948581520191851c168152835192835251166020820152f35b50346101cf5760203660031901126101cf576004356001600160401b0381116104df5761133c90369060040161216b565b905f516020612d4d5f395f51905f52549061135683612391565b9161136460405193846122a4565b83835261137084612391565b602084019490601f19013686376011869201915b8181106113d957868587604051928392602084019060208552518091526040840192915b8181106113b6575050500390f35b91935091602080826113cb60019488516121db565b0194019101918493926113a8565b6113e48183866123a8565b3587528260205260ff6040882054166113fd82876123cc565b600382101561140f5752600101611384565b634e487b7160e01b89526021600452602489fd5b50346101cf57806003193601126101cf5761143c612729565b5f516020612d2d5f395f51905f5280546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101cf57806003193601126101cf576114a5612729565b5f516020612d6d5f395f51905f525460ff8160401c16801561175f575b61175057680100000000000000029068ffffffffffffffffff1916175f516020612d6d5f395f51905f52555f516020612d4d5f395f51905f5254604090815161150b83826122a4565b6017815260208101907f726f757465722e73746f726167652e526f757465725632000000000000000000825261153f612729565b5190205f19810190811161173c57916020917fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29382519084820190815284825261158984836122a4565b60ff19915190201690815f516020612d4d5f395f51905f52556115aa612890565b80518355600183019063ffffffff868201511669ffffffffffff00000000868454930151881b169169ffffffffffffffffffff1916171790556004810160048301908082036116ee575b505061ffff600782015416600783019061ffff19825416179055611630600161161c836128d5565b016116274291612340565b600885016128ef565b600e8101600e83019080820361169c575b5050600f8101600f830191818303611686575b5050505060ff60401b195f516020612d6d5f395f51905f5254165f516020612d6d5f395f51905f52555160028152a180f35b601092839254905501549101555f808080611654565b806001600160401b03806001600160801b03935416166001600160401b031984541617835554851c16600160401b600160c01b03825491861b1690600160401b600160c01b0319161790555f80611641565b5481546001600160a01b03199081166001600160a01b039283161790925560058381015490850180548416918316919091179055600680840154908501805490931691161790555f806115f4565b634e487b7160e01b84526011600452602484fd5b63f92ee8a960e01b8252600482fd5b5060026001600160401b03821610156114c2565b50346101cf57806003193601126101cf575f516020612d4d5f395f51905f5254600501546040516001600160a01b039091168152602090f35b3461182a576117cc6117bd3661219b565b6001600160a01b03929161275c565b16803b1561182a576040519063485cc95560e01b82523360048301525f60248301525f8260448183855af191821561181f5760209261180f575b50604051908152f35b5f611819916122a4565b5f611806565b6040513d5f823e3d90fd5b5f80fd5b3461182a57602036600319011261182a576118476121b1565b61184f612729565b5f516020612d4d5f395f51905f525460040180546001600160a01b0319166001600160a01b03909216919091179055005b3461182a575f36600319011261182a5760205f516020612d4d5f395f51905f525454604051908152f35b3461182a576118b83661219b565b9081158015906119f9575b156119be5760115f516020612d4d5f395f51905f52546118e5815415156121e8565b0190805f528160205260ff60405f20541660038110156119aa57611949577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603360248201527f676976656e20636f646520696420697320616c7265616479206f6e2076616c6960448201527219185d1a5bdb881bdc881d985b1a59185d1959606a1b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b60405162461bcd60e51b8152602060048201526013602482015272189b1bd88818d85b89dd08189948199bdd5b99606a1b6044820152606490fd5b505f4915156118c3565b3461182a57604036600319011261182a576004356001600160401b03811161182a57611a3390369060040161216b565b6024356001600160401b03811161182a57611a5290369060040161216b565b90927f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6121325760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f516020612d4d5f395f51905f525491611aba835415156121e8565b60605f915b858310156120f6578260051b840135609e198536030181121561182a5784019060028601546040830135036120a357611afb6060830135612a44565b1561204f57949396959291906020611b148183016125bc565b65ffffffffffff60405191611b288361225a565b843583521691829101528135600287015565ffffffffffff19600387015416176003860155611b5a60808201826124fb565b9690946060995f925b89841015611fac578360051b88013560be198936030181121561182a5788019b611b8c8d6123f8565b6001600160a01b03165f90815260128b01602052604090205415611f4f5760068a01548d906001600160a01b03166060611bc5836123f8565b92019182356001600160801b03811680910361182a5760405163a9059cbb60e01b81526001600160a01b039092166004830152602482015290602090829060449082905f905af1801561181f57611f19575b506001600160a01b03611c298f6123f8565b6040516309ed323560e41b8152602060048201529f9116918f919060e48301906001600160801b0390611c96906001600160a01b03611c67866121c7565b166024870152602085013560448701526001600160a01b03611c8b604087016121c7565b166064870152612a87565b16608484015236829003601e19019060808301358281121561182a57830190602082359201946001600160401b03831161182a57606083023603861361182a57826101049260c060a4840152520193905f905b808210611ecf575050509e9f939495969798999a9b9c9d9e60a08201359081121561182a570190813560208301926001600160401b03821161182a578160051b91823603851361182a578684036023190160c48801528084528694928401602090810194908101925f923682900360de19019290915b828510611dd6575050505050505091815f8160209503925af190811561181f575f91611da4575b50611d93906001926122c5565b9b9a99989796959401929190611b63565b90506020813d8211611dce575b81611dbe602093836122a4565b8101031261182a57516001611d86565b3d9150611db1565b9193959750919395601f1983820301875287358581121561182a57820160208101358252906001600160a01b03611e0f604084016121c7565b1660208201526060820135603e19368490030181121561182a5782602091010191602083359301906001600160401b03841161182a57833603821361182a578360c092836040860152818486015260e08501375f60e085850101526001600160801b03611e7e60808301612a87565b16606084015260a0810135608084015201359163ffffffff60e01b831680930361182a5760e0826020939260019560a086950152601f80199101160101990197019501929091899796959492611d5f565b90919460608060019288358152838060a01b03611eee60208b016121c7565b1660208201526001600160801b03611f0860408b01612a87565b166040820152019601920190611ce9565b6020813d8211611f47575b81611f31602093836122a4565b8101031261182a57518015158114611c17575f80fd5b3d9150611f24565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b96509697509793986001939150916120469260208151910120907fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e602060405183358152a1611ffd602082016125bc565b9160606040519260208401948135865265ffffffffffff60d01b9060d01b166040850152604081013560468501520135606683015260868201526086815261041e60a6826122a4565b91960191611abf565b60405162461bcd60e51b815260206004820152602660248201527f616c6c6f776564207072656465636573736f7220626c6f636b207761736e277460448201526508199bdd5b9960d21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b604482015264040d0c2e6d60db1b6064820152608490fd5b6104d690878661210d9460208151910120906125cf565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b633ee5aeb560e01b5f5260045ffd5b3461182a575f36600319011261182a5760209060145f516020612d4d5f395f51905f525401548152f35b9181601f8401121561182a578235916001600160401b03831161182a576020808501948460051b01011161182a57565b604090600319011261182a576004359060243590565b600435906001600160a01b038216820361182a57565b35906001600160a01b038216820361182a57565b9060038210156119aa5752565b156121ef57565b60405162461bcd60e51b815260206004820152603860248201527f726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f60448201527f6f6b757047656e657369734861736828296020666972737400000000000000006064820152608490fd5b604081019081106001600160401b0382111761227557604052565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b0382111761227557604052565b90601f801991011681019081106001600160401b0382111761227557604052565b6020806122f2928195946040519682889351918291018585015e82019083820152030180855201836122a4565b565b156122fb57565b60405162461bcd60e51b815260206004820152601e60248201527f7369676e61747572657320766572696669636174696f6e206661696c656400006044820152606490fd5b90604051918281549182825260208201905f5260205f20925f5b81811061236f5750506122f2925003836122a4565b84546001600160a01b031683526001948501948794506020909301920161235a565b6001600160401b0381116122755760051b60200190565b91908110156123b85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b80518210156123b85760209160051b010190565b604051906123ed8261225a565b5f6020838281520152565b356001600160a01b038116810361182a5790565b6124235f516020612d4d5f395f51905f52546128d5565b905f5b8381106124365750505050600190565b61244461083d8286856123a8565b6001600160a01b03165f9081526020849052604090205460ff161561246b57600101612426565b505050505f90565b9190820391821161248057565b634e487b7160e01b5f52601160045260245ffd5b8181029291811591840414171561248057565b9291906124b381612391565b936124c160405195866122a4565b602085838152019160051b810192831161182a57905b8282106124e357505050565b602080916124f0846121c7565b8152019101906124d7565b903590601e198136030182121561182a57018035906001600160401b03821161182a57602001918160051b3603831361182a57565b35801515810361182a5790565b5f1981146124805760010190565b6001600160a01b031680156125a9575f516020612d2d5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b3565ffffffffffff8116810361182a5790565b9190916125f36125de826128d5565b9161ffff600760018501549201541690612a22565b9260405190602082019081526020825261260e6040836122a4565b61264a603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f1981018352826122a4565b5190205f925f5b8681101561271e578060051b820135601e198336030181121561182a5782018035906001600160401b03821161182a576020810190823603821361182a57604051906126a7601f8501601f1916602001836122a4565b838252602084369201011161182a575f6020846126d9956126d095838601378301015285612bad565b90929192612be7565b6001600160a01b03165f9081526020859052604090205460ff16612700575b600101612651565b9361270a9061253d565b938585036126f85750505050505050600190565b505050505050505f90565b5f516020612d2d5f395f51905f52546001600160a01b0316330361274957565b63118cdaa760e01b5f523360045260245ffd5b5f516020612d4d5f395f51905f525491612778835415156121e8565b815f526011830160205260ff60405f20541660038110156119aa57600203612834576127d660139160018060a01b036005860154169060405160208101918683526040820152604081526127cd6060826122a4565b51902090612c47565b9260018060a01b0384165f52601281016020528260405f2055016127fa815461253d565b90556040516001600160a01b03831681527f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf190602090a290565b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b5f6040805161289e81612289565b82815282602082015201526040516128b581612289565b5f815263ffffffff4316602082015265ffffffffffff4216604082015290565b6128de81612a9b565b156128e957600b0190565b60080190565b905f5b6001830190815481101561292f575f91825260208083208201546001600160a01b031683528490526040909120805460ff191690556001016128f2565b50505f5b8151811015612974576001906001600160a01b0361295182856123cc565b5116828060a01b03165f528360205260405f208260ff1982541617905501612933565b50600182018151916001600160401b038311612275576801000000000000000083116122755781548383558084106129e2575b50602001905f5260205f205f5b8381106129c5575050505060020155565b82516001600160a01b0316818301556020909201916001016129b4565b825f528360205f2091820191015b8181106129fd57506129a7565b5f81556001016129f0565b612a1181612a9b565b15612a1c5760080190565b600b0190565b61ffff612a30921690612494565b61270f810180911161248057612710900490565b905f19430143811161248057805b612a5d575b505f9150565b8040838103612a6e57506001925050565b15612a82578015612480575f190180612a52565b612a57565b35906001600160801b038216820361182a57565b600d600a820154910154808214612b3e5780821091421090811590421015918190612b37575b15612ad65782612ad057505090565b14919050565b60405162461bcd60e51b815260206004820152603360248201527f636f756c64206e6f74206964656e746966792076616c696461746f727320666f6044820152720722063757272656e742074696d657374616d7606c1b6064820152608490fd5b5081612ac1565b606460405162461bcd60e51b815260206004820152602060248201527f657261732074696d657374616d70206d757374206e6f7420626520657175616c6044820152fd5b60ff5f516020612d6d5f395f51905f525460401c1615612b9e57565b631afcd79f60e31b5f5260045ffd5b8151919060418303612bdd57612bd69250602082015190606060408401519301515f1a90612caa565b9192909190565b50505f9160029190565b60048110156119aa5780612bf9575050565b60018103612c105763f645eedf60e01b5f5260045ffd5b60028103612c2b575063fce698f760e01b5f5260045260245ffd5b600314612c355750565b6335e2f38360e21b5f5260045260245ffd5b6e5af43d82803e903d91602b57fd5bf390763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b17602052603760095ff5906001600160a01b03821615612c9b57565b63b06ebf3d60e01b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612d21579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561181f575f516001600160a01b03811615612d1757905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220f66e3e1bc4037348273211a9406000b46d6c209d6dcb3083248113c6033f9a2b64736f6c634300081c0033","sourceMap":"690:16205:120:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;:::i;:::-;5005:36;-1:-1:-1;;;;;;;;;;;690:16205:120;5005:36;:::i;:::-;:52;690:16205;;;;;;-1:-1:-1;690:16205:120;;;;;;-1:-1:-1;690:16205:120;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;2357:1:24;690:16205:120;;:::i;:::-;2303:62:24;;:::i;:::-;2357:1;:::i;:::-;690:16205:120;;;;;;;;;;;;;;;;;5154:28;-1:-1:-1;;;;;;;;;;;690:16205:120;5154:28;690:16205;;;;;;;;;;;;;;;;;;;;;;5619:147;-1:-1:-1;;;;;;;;;;;690:16205:120;;5704:25;5657:38;:33;;;:::i;:::-;:38;690:16205;5704:25;;690:16205;;5619:147;;:::i;:::-;690:16205;;;;;;;;;;;;;;;;;;;;5428:41;:36;-1:-1:-1;;;;;;;;;;;690:16205:120;5428:36;:::i;:::-;:41;690:16205;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;690:16205:120;;10552:107;690:16205;;10560:38;;10552:107;:::i;:::-;690:16205;10720:13;;10888:19;;;;10715:838;10764:3;10735:27;;;;;;690:16205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10888:82;690:16205;;;11076:20;3987::122;11076::120;11466:76;11076:20;;;;;:::i;:::-;;;;690:16205;;;;;;;;;11163:24;690:16205;;;;;;;;11205:39;;;:41;690:16205;;11205:41;:::i;:::-;690:16205;;11072:279;11406:20;;;:::i;:::-;690:16205;;11370:57;690:16205;;;;;;11370:57;3987:20:122;:::i;:::-;690:16205:120;;3951:57:122;690:16205:120;3951:57:122;;690:16205:120;;;;;;;;;;;;3951:57:122;;;;;;:::i;:::-;690:16205:120;3941:68:122;;11466:76:120;;:::i;:::-;10764:3;690:16205;10720:13;;;11072:279;690:16205;;;;;;;;;;;;;;;;11072:279;;690:16205;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;10735:27;;;11563:155;10735:27;;11584:78;10735:27;690:16205;;;;;11616:32;11584:78;;:::i;:::-;11563:155;:::i;690:16205::-;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;:::i;:::-;;;;2908:43:37;690:16205:120;;8825:30;;;;;:::i;:::-;690:16205;;;8922:32;690:16205;8922:32;;690:16205;;;;;;;;8922:32;;;690:16205;8922:32;;:::i;:::-;690:16205;;8912:43;;;-1:-1:-1;;;;;690:16205:120;2908:43:37;:::i;:::-;690:16205:120;13659:43;;;;;690:16205;;-1:-1:-1;;;13659:43:120;;-1:-1:-1;;;;;690:16205:120;;;;13659:43;;690:16205;;;;;;;;;;;13659:43;;;;;;;;;690:16205;8975:47;;;;;;;690:16205;;;;;;8975:47;;9002:10;690:16205;8975:47;;690:16205;;;;;8975:47;;690:16205;8975:47;;;;;;;;;;;690:16205;;;;;;;;;8975:47;;;;;;:::i;:::-;690:16205;;8975:47;;;;690:16205;;;;;;;;;13659:43;;;;;:::i;:::-;690:16205;;13659:43;;;;;690:16205;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;;4256:23;690:16205;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;4011:32;-1:-1:-1;;;;;;;;;;;690:16205:120;4011:32;690:16205;;;;;;;;;;;;;;;;;;;;;;;;5300:41;:36;-1:-1:-1;;;;;;;;;;;690:16205:120;5300:36;:::i;:::-;:41;690:16205;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;-1:-1:-1;690:16205:120;;;;;;;;;5300:41;690:16205;;;;;;;;;;;;;;;;;4139:30;-1:-1:-1;;;;;;;;;;;690:16205:120;4139:30;690:16205;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;;;6005:22;-1:-1:-1;;;;;;;;;;;690:16205:120;6005:22;690:16205;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;690:16205:120;;;;6878:28;6810:13;6878:28;;6805:129;6825:23;;;;;;690:16205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:16205:120;;;;;;;;;6878:28;690:16205;;;6850:3;6907:15;;;6878:28;6907:15;;;;:::i;:::-;;:::i;:::-;690:16205;;;;;;-1:-1:-1;690:16205:120;;;;;-1:-1:-1;690:16205:120;;6869:54;;;;:::i;:::-;577:4:122;690:16205:120;6810:13;;690:16205;;;;;;;-1:-1:-1;;690:16205:120;;;;;;:::i;:::-;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;;;4301:16:25;690:16205:120;-1:-1:-1;;;;;690:16205:120;;4726:16:25;;:34;;;;690:16205:120;;4790:16:25;:50;;;;690:16205:120;4855:13:25;:30;;;;690:16205:120;4851:91:25;;;-1:-1:-1;;690:16205:120;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;6961:1:25;;690:16205:120;;4979:67:25;;690:16205:120;6893:76:25;;;:::i;:::-;;;:::i;6961:1::-;1512:15:120;:19;690:16205;;1594:21;;690:16205;;1678:32;;;690:16205;;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;690:16205:120;16763:27;;-1:-1:-1;;690:16205:120;;;;;;;;2293:85;690:16205;;;;2310:37;690:16205;;;;;16744:52;690:16205;;16744:52;690:16205;16744:52;;690:16205;;;;16744:52;;;;:::i;:::-;690:16205;;;;16734:63;;:89;690:16205;;-1:-1:-1;;;;;;;;;;;690:16205:120;1896:17;;;:::i;:::-;690:16205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;1946:53;;690:16205;;;1946:53;690:16205;;1923:20;;690:16205;;-1:-1:-1;;;;;;690:16205:120;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2009:25;;;690:16205;;-1:-1:-1;;690:16205:120;;;;;;;:::i;:::-;;674:18:122;690:16205:120;;;;;;:::i;:::-;447:13:122;690:16205:120;;4128:60:122;690:16205:120;2107:22;;;690:16205;;-1:-1:-1;;;;;;690:16205:120;;;;;;;;;;;;;;:::i;:::-;577:4:122;;;2194:47:120;577:4:122;2175:16:120;;;690:16205;577:4:122;;;690:16205:120;1512:15;690:16205;;;;:::i;:::-;2310:37;;2293:85;:::i;:::-;5066:101:25;;690:16205:120;;;5066:101:25;690:16205:120;5142:14:25;690:16205:120;-1:-1:-1;;;690:16205:120;-1:-1:-1;;;;;;;;;;;690:16205:120;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;5142:14:25;690:16205:120;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;4979:67:25;-1:-1:-1;;690:16205:120;;;-1:-1:-1;;;;;;;;;;;690:16205:120;4979:67:25;;;4851:91;-1:-1:-1;;;4908:23:25;;690:16205:120;6498:23:25;4908;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;690:16205:120;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;690:16205:120;9344:29;690:16205;9344:29;;;690:16205;;;;9326:15;:47;:15;;:47;:::i;:::-;9377:16;;;;690:16205;9325:72;690:16205;;;;;;;9416:19;690:16205;9416:19;;690:16205;;9344:29;690:16205;;;;;;;9416:42;;690:16205;;9571:42;;;;:::i;:::-;690:16205;;;;;;;9650:40;9665:25;;;690:16205;9650:40;;:::i;:::-;9326:15;9631:59;690:16205;;9818:34;;;:::i;:::-;9326:15;;9870:28;;;690:16205;9870:46;690:16205;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3015:60:122;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;3015:60:122;690:16205:120;10079:88;690:16205;;;;;;3015:60:122;;;;;;;:::i;:::-;690:16205:120;3005:71:122;;690:16205:120;;;10121:32;;690:16205;;;;10121:32;;;690:16205;10121:32;;:::i;:::-;690:16205;10111:43;;10079:88;;:::i;:::-;690:16205;;;10254:66;10284:21;10336:40;10284:21;690:16205;10284:21;;690:16205;10284:21;;:::i;:::-;690:16205;;;:::i;:::-;10254:66;;:::i;:::-;690:16205;;;;;10336:40;690:16205;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;9344:29;690:16205;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;7039:36;-1:-1:-1;;;;;;;;;;;690:16205:120;7039:36;690:16205;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;:::i;:::-;6529:31;-1:-1:-1;;;;;;;;;;;690:16205:120;6529:31;:43;690:16205;;;;;;-1:-1:-1;690:16205:120;;;;;-1:-1:-1;690:16205:120;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;;7590:26;;;690:16205;;7580:37;7636:25;;;690:16205;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;4491:35;;690:16205;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5877:25;-1:-1:-1;;;;;;;;;;;690:16205:120;5877:25;-1:-1:-1;;;;;690:16205:120;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;690:16205:120;;;;6356:19;6291:13;6356:19;;6286:120;6306:20;;;;;;690:16205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;6328:3;6382:12;;;;;:::i;:::-;690:16205;;;;;;;;;;;;6347:48;;;;:::i;:::-;690:16205;;;;;;;;;6291:13;;690:16205;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;690:16205:120;;-1:-1:-1;;;;;;690:16205:120;;;;;;;-1:-1:-1;;;;;690:16205:120;3975:40:24;690:16205:120;;3975:40:24;690:16205:120;;;;;;;;;;;;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;;6431:44:25;;;;690:16205:120;6427:105:25;;690:16205:120;;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;690:16205:120;16763:27;;-1:-1:-1;;690:16205:120;;;;;;;;;;6656:20:25;690:16205:120;;;16744:52;;;;690:16205;;;16744:52;;;;;;;:::i;:::-;690:16205;;;;16734:63;;:89;690:16205;;-1:-1:-1;;;;;;;;;;;690:16205:120;2673:17;;:::i;:::-;690:16205;;;;6593:4:25;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;2842:23;;690:16205;2816:23;;690:16205;;;;;;;3012:28;;690:16205;3012:28;;;690:16205;;3012:28;2942;;690:16205;;;;;;;;;3350:140;6593:4:25;3422:36:120;;;:::i;:::-;:41;690:16205;3465:15;690:16205;;:::i;:::-;3380:40;;;3350:140;:::i;:::-;3587:25;;;;3559;;690:16205;;;;;;;3692:19;;;;;;3670;;690:16205;;;;;;;;;;;-1:-1:-1;;;690:16205:120;-1:-1:-1;;;;;;;;;;;690:16205:120;;-1:-1:-1;;;;;;;;;;;690:16205:120;;2446:1;690:16205;;6656:20:25;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;-1:-1:-1;;;;;690:16205:120;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;-1:-1:-1;;;;;;;690:16205:120;;;;;;;-1:-1:-1;;;;;;;690:16205:120;;;;;;;;;;;;;-1:-1:-1;;;;;;690:16205:120;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;-1:-1:-1;;;690:16205:120;;;;;;;;6427:105:25;-1:-1:-1;;;6498:23:25;;690:16205:120;6498:23:25;;6431:44;690:16205:120;2446:1;-1:-1:-1;;;;;690:16205:120;;6450:25:25;;6431:44;;690:16205:120;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;4373:35;;690:16205;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;8535:30;690:16205;;;:::i;:::-;-1:-1:-1;;;;;690:16205:120;;8535:30;:::i;:::-;690:16205;8576:50;;;;;690:16205;;;;;;8576:50;;8603:10;690:16205;8576:50;;690:16205;;;;;;;8576:50;;;;;;;;;;;;690:16205;8576:50;;;690:16205;;;;;;;;8576:50;690:16205;8576:50;;;:::i;:::-;690:16205;8576:50;;;690:16205;;;;;;;;;8576:50;690:16205;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;690:16205:120;;7308:23;690:16205;;-1:-1:-1;;;;;;690:16205:120;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;;;;;;;;;;;;:::i;:::-;7879:16;;;;;:36;;;690:16205;;;;8133:19;-1:-1:-1;;;;;;;;;;;690:16205:120;7994:107;690:16205;;8002:38;;7994:107;:::i;:::-;8133:19;690:16205;;;;;;;;;;;;;;;;;;;;;8368:45;690:16205;;;;;;;;;;;8318:34;690:16205;;;;;;;;;;;;;;;;;8368:45;690:16205;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;7879:36;7899:11;690:16205;7899:11;:16;;7879:36;;690:16205;;;;;;-1:-1:-1;;690:16205:120;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;:::i;:::-;3321:69:57;;637:66:54;3321:69:57;1413:93:54;;1624:4;637:66;3550:68:57;-1:-1:-1;;;;;;;;;;;690:16205:120;;11930:107;690:16205;;11938:38;;11930:107;:::i;:::-;690:16205;;12094:262;12144:3;12114:28;;;;;;690:16205;;;;;;;;;;;;;;;;;;;13911:27;;;;690:16205;;13947:39;;690:16205;13911:75;690:16205;;14068:58;690:16205;14092:33;;690:16205;14068:58;:::i;:::-;690:16205;;;14386:26;;;;;;;690:16205;14386:26;;;;;:::i;:::-;690:16205;;;;;;;:::i;:::-;;;577:4:122;;690:16205:120;14339:74;;;;690:16205;;;13911:27;;;690:16205;;;;;;;;;;;;;14483:28;;;;;;:::i;:::-;14994:30;;;690:16205;15040:13;690:16205;15035:592;15080:3;15055:23;;;;;;690:16205;;;;;;;;;;;;;;;;;;;15226:18;;;;:::i;:::-;-1:-1:-1;;;;;690:16205:120;;;;;15197:28;;;690:16205;;;;;;15197:53;690:16205;;15343:32;;;690:16205;;;-1:-1:-1;;;;;690:16205:120;;15386:18;690:16205;15386:18;:::i;:::-;15406:25;;690:16205;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;-1:-1:-1;;;15330:102:120;;-1:-1:-1;;;;;690:16205:120;;;;15330:102;;690:16205;;;;;;;;;;15330:102;;690:16205;;;;15330:102;;;;;;;;15080:3;-1:-1:-1;;;;;;15480:18:120;690:16205;15480:18;:::i;:::-;690:16205;;-1:-1:-1;;;15472:62:120;;690:16205;;15472:62;;690:16205;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;-1:-1:-1;;;;;690:16205:120;;;:::i;:::-;;;;;;;;;;15330:102;690:16205;;;-1:-1:-1;;;;;690:16205:120;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;690:16205:120;;14483:28;690:16205;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;;;;;15472:62;;;;;;;;;690:16205;15472:62;690:16205;15472:62;;;;;;;;;;690:16205;15472:62;;;690:16205;15569:47;;;1624:4:54;15569:47:120;;:::i;:::-;15080:3;15040:13;;;;;;;690:16205;;15040:13;;;;15472:62;;;690:16205;15472:62;;;;;;;;;690:16205;15472:62;;;:::i;:::-;;;690:16205;;;;;1624:4:54;15472:62:120;;;;;-1:-1:-1;15472:62:120;;690:16205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;14483:28;690:16205;;;:::i;:::-;;;;;;;;;;14483:28;690:16205;;;;;;;;;;;;;;;;;;;;;1624:4:54;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:4:54;690:16205:120;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;:::i;:::-;;;;;;;;;;;;;;15330:102;690:16205;15330:102;;;;;;;;;690:16205;15330:102;;;:::i;:::-;;;690:16205;;;;;;;;;;15330:102;690:16205;;;;15330:102;;;-1:-1:-1;15330:102:120;;690:16205;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;15330:102;690:16205;;;-1:-1:-1;;;690:16205:120;;;;;;;15055:23;;;;;;;;;1624:4:54;15055:23:120;;;;12270:75;15055:23;690:16205;;;;;15644:28;690:16205;14528:37;690:16205;;;;;;;14528:37;14656:26;690:16205;14386:26;;14656;:::i;:::-;690:16205;;;;3357:98:122;690:16205:120;3357:98:122;;690:16205:120;;;;;;;;;;;;;;;;;13947:39;;690:16205;;;;;14092:33;690:16205;;;;;;;;;;3357:98:122;;;;;;:::i;12270:75:120:-;12099:13;;690:16205;;12099:13;;690:16205;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;15330:102;690:16205;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;15330:102;690:16205;;;-1:-1:-1;;;690:16205:120;;;;;;;12114:28;12387:79;12114:28;;;12366:156;12114:28;690:16205;;;;;12419:33;12387:79;;:::i;12366:156::-;690:16205;637:66:54;3550:68:57;690:16205:120;1413:93:54;1465:30;;;690:16205:120;1465:30:54;690:16205:120;;1465:30:54;690:16205:120;;;;;;-1:-1:-1;;690:16205:120;;;;;;7166:42;-1:-1:-1;;;;;;;;;;;690:16205:120;7166:42;690:16205;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;690:16205:120;;;;;;:::o;:::-;;;-1:-1:-1;;;;;690:16205:120;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;:::o;:::-;;;;-1:-1:-1;690:16205:120;;;;;-1:-1:-1;690:16205:120;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:16205:120;;-1:-1:-1;690:16205:120;;-1:-1:-1;690:16205:120;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;-1:-1:-1;690:16205:120;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;690:16205:120;;;;;;;:::o;:::-;;-1:-1:-1;;;;;690:16205:120;;;;;;;:::o;4539:375::-;4676:36;-1:-1:-1;;;;;;;;;;;690:16205:120;4676:36;:::i;:::-;4728:13;690:16205;4743:22;;;;;;4896:11;;;;690:16205;4539:375;:::o;4767:3::-;4814:14;;;;;;:::i;:::-;-1:-1:-1;;;;;690:16205:120;-1:-1:-1;690:16205:120;;;;;;;;;;;;;4790:39;4786:90;;690:16205;;4728:13;;4786:90;4849:12;;;;690:16205;4849:12;:::o;690:16205::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;-1:-1:-1;;690:16205:120;;;;;;;:::o;3405:215:24:-;-1:-1:-1;;;;;690:16205:120;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;690:16205:120;;-1:-1:-1;;;;;;690:16205:120;;;;;;;-1:-1:-1;;;;;690:16205:120;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;690:16205:120;;3509:1:24;3534:31;690:16205:120;;;;;;;;;;:::o;5229:897:122:-;;;;5508:97;5437:28;;;:::i;:::-;5528:15;690:16205:120;5552:25:122;5528:15;;;690:16205:120;5552:25:122;;690:16205:120;;5508:97:122;;:::i;:::-;690:16205:120;;;5680:27:122;;;;690:16205:120;;;5680:27:122;;;;690:16205:120;5680:27:122;;:::i;:::-;2831:45:59;690:16205:120;;;2831:45:59;;5680:27:122;2831:45:59;;690:16205:120;;;;;;5642:4:122;690:16205:120;;;;;;;;;;;;;;;;;;;;2831:45:59;;690:16205:120;;2831:45:59;;;;;;:::i;:::-;690:16205:120;2821:56:59;;690:16205:120;5761:13:122;690:16205:120;5800:3:122;5776:22;;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;5680:27:122;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;690:16205:120;5680:27:122;690:16205:120;;;:::i;:::-;;;;5680:27:122;690:16205:120;;;;;;;;;5680:27:122;690:16205:120;3927:8:58;690:16205:120;3871:27:58;690:16205:120;;;;;;;;;3871:27:58;;:::i;:::-;3927:8;;;;;:::i;:::-;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;5936:151:122;;5800:3;5528:15;690:16205:120;5761:13:122;;5936:151;5989:17;;;;:::i;:::-;:30;;;;5936:151;5985:88;6043:11;;;;;;;5528:15;6043:11;:::o;5776:22::-;;;;;;;;690:16205:120;5229:897:122;:::o;2658:162:24:-;-1:-1:-1;;;;;;;;;;;690:16205:120;-1:-1:-1;;;;;690:16205:120;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;690:16205:120;;-1:-1:-1;2763:40:24;12571:887:120;-1:-1:-1;;;;;;;;;;;690:16205:120;;12707:107;690:16205;;12715:38;;12707:107;:::i;:::-;690:16205;-1:-1:-1;690:16205:120;12846:19;;;690:16205;;;;-1:-1:-1;690:16205:120;;;;;;;;;12884:24;12846:62;690:16205;;2908:43:37;13343:33:120;690:16205;;;;;;13197:32;;;690:16205;;;;;;13241:32;;690:16205;;;;;;;;;13241:32;;;;;;:::i;:::-;690:16205;13231:43;;2908::37;;:::i;:::-;13286:37:120;690:16205;;;;;;;-1:-1:-1;690:16205:120;13286:28;;;690:16205;;;;-1:-1:-1;690:16205:120;;13343:33;:35;690:16205;;13343:35;:::i;:::-;690:16205;;;;-1:-1:-1;;;;;690:16205:120;;;;13394:32;;690:16205;;13394:32;12571:887;:::o;690:16205::-;;;-1:-1:-1;;;690:16205:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;4584:169:122;-1:-1:-1;690:16205:120;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;577:4:122;;690:16205:120;4707:12:122;690:16205:120;;4671:75:122;;690:16205:120;;4729:15:122;690:16205:120;;4671:75:122;;690:16205:120;4584:169:122;:::o;6132:318::-;6251:47;;;:::i;:::-;;;;6321:37;;6314:44;:::o;6247:197::-;6396:37;;6389:44;:::o;15685:618:120:-;;15873:1;15905:3;690:16205;15880:16;;690:16205;;;15876:27;;;;;15873:1;690:16205;;;;;;;;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;-1:-1:-1;;690:16205:120;;;;;15861:13;;15876:27;;;15873:1;16080:3;690:16205;;16053:25;;;;;690:16205;;-1:-1:-1;;;;;16120:17:120;690:16205;16120:17;;:::i;:::-;690:16205;;;;;;;;-1:-1:-1;690:16205:120;;;;;-1:-1:-1;690:16205:120;;;;;;;;;;;16038:13;;16053:25;;690:16205;16205:16;;690:16205;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;;;;16033:163;690:16205;;;;15873:1;690:16205;;15873:1;690:16205;15873:1;690:16205;;;;;;16248:28;;;;;;690:16205;15685:618::o;690:16205::-;;;-1:-1:-1;;;;;690:16205:120;;;;;;;;;;;;;;;;15873:1;690:16205;;;15873:1;690:16205;;;;;;;;;;;;;;;;15873:1;690:16205;;;;;;6456:319:122;6576:47;;;:::i;:::-;;;;6646:37;;6639:44;:::o;6572:197::-;6721:37;;6714:44;:::o;7908:285::-;690:16205:120;8123:47:122;7908:285;690:16205:120;8123:47:122;;:::i;:::-;8173:4;690:16205:120;;;;;;;8181:5:122;690:16205:120;;7908:285:122;:::o;3478:340::-;;690:16205:120;;3576:12:122;690:16205:120;3576:12:122;690:16205:120;;;;3559:230:122;3594:5;;;3559:230;-1:-1:-1;690:16205:120;;-1:-1:-1;3478:340:122:o;3601:3::-;3634:12;;3664:11;;;;;-1:-1:-1;3591:1:122;;-1:-1:-1;;3695:11:122:o;3660:119::-;3731:8;3727:52;;690:16205:120;;;;-1:-1:-1;;690:16205:120;;3564:28:122;;3727:52;3759:5;;690:16205:120;;;-1:-1:-1;;;;;690:16205:120;;;;;;:::o;6998:904:122:-;7248:54;7170;;;690:16205:120;7248:54:122;;690:16205:120;7376:10:122;;;690:16205:120;;7452:9:122;;;7131:15;;-1:-1:-1;7484:9:122;;;7131:15;;-1:-1:-1;7516:9:122;7628:14;;;;;6998:904;690:16205:120;;;7865:30:122;;;7858:37;;6998:904;:::o;7865:30::-;7880:14;;6998:904;-1:-1:-1;6998:904:122:o;690:16205:120:-;;;-1:-1:-1;;;690:16205:120;;;7248:37:122;690:16205:120;;;;;;;;;;;;;-1:-1:-1;;;690:16205:120;;;;;;;7628:14:122;;;;;690:16205:120;;;;;;;;;;7248:37:122;690:16205:120;;;;;;;;;;;;;;7084:141:25;690:16205:120;-1:-1:-1;;;;;;;;;;;690:16205:120;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;2129:778:58;690:16205:120;;;2129:778:58;2319:2;2299:22;;2319:2;;2751:25;2535:196;;;;;;;;;;;;;;;-1:-1:-1;2535:196:58;2751:25;;:::i;:::-;2744:32;;;;;:::o;2295:606::-;2807:83;;2823:1;2807:83;2827:35;2807:83;;:::o;7280:532::-;690:16205:120;;;;;;7366:29:58;;;7411:7;;:::o;7362:444::-;690:16205:120;7462:38:58;;690:16205:120;;7523:23:58;;;7375:20;7523:23;690:16205:120;7375:20:58;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;7375:20;7634:46;690:16205:120;;;7375:20:58;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;7375:20;7763:32;690:16205:120;;;7375:20:58;7763:32;3384:974:37;3673:585;3384:974;3673:585;;;;;;;-1:-1:-1;3673:585:37;;;;;;;;-1:-1:-1;3673:585:37;690:16205:120;-1:-1:-1;;;;;690:16205:120;;4271:22:37;4267:85;;3384:974::o;4267:85::-;4316:25;;;-1:-1:-1;4316:25:37;;-1:-1:-1;4316:25:37;5203:1551:58;;;6283:66;6270:79;;6266:164;;690:16205:120;;;;;;-1:-1:-1;690:16205:120;;;;;;;;;;;;;;;;;;;6541:24:58;;;;;;;;;-1:-1:-1;6541:24:58;-1:-1:-1;;;;;690:16205:120;;6579:20:58;6575:113;;6698:49;-1:-1:-1;6698:49:58;-1:-1:-1;5203:1551:58;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:58;6541:24;6615:62;-1:-1:-1;6615:62:58;:::o;6266:164::-;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o","linkReferences":{}},"methodIdentifiers":{"areValidators(address[])":"8f381dbe","codeState(bytes32)":"c13911e8","codesStates(bytes32[])":"82bdeaad","commitBlocks((bytes32,uint48,bytes32,bytes32,(address,bytes32,address,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"01b1d156","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","commitValidators((address[],uint256),bytes[])":"aaf0fe6a","computeSettings()":"84d22a4f","createProgram(bytes32,bytes32)":"527de0f9","createProgramWithDecoder(address,bytes32,bytes32)":"e7006a74","genesisBlockHash()":"28e24b3d","genesisTimestamp()":"cacf66ab","initialize(address,address,address,address,uint256,uint256,address[])":"b1669a33","isValidator(address)":"facd743b","latestCommittedBlockHash()":"c9f16a11","lookupGenesisHash()":"8b1edf1e","mirrorImpl()":"e6fabc09","mirrorProxyImpl()":"65ecfea2","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCodeIds(address[])":"baaf0201","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setMirror(address)":"3d43b418","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","validatedCodesCount()":"007a32e7","validators()":"ca1e7819","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"name\":\"ComputationSettingsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"}],\"name\":\"NextEraValidatorsCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"areValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_codesIds\",\"type\":\"bytes32[]\"}],\"name\":\"codesStates\",\"outputs\":[{\"internalType\":\"enum Gear.CodeState[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes32\",\"name\":\"previousCommittedBlock\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predecessorBlock\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"inheritor\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct Gear.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct Gear.Message[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Gear.BlockCommitment[]\",\"name\":\"_blockCommitments\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct Gear.CodeCommitment[]\",\"name\":\"_codeCommitments\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"eraIndex\",\"type\":\"uint256\"}],\"internalType\":\"struct Gear.ValidatorsCommitment\",\"name\":\"commitment\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeSettings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"threshold\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"wvaraPerSecond\",\"type\":\"uint128\"}],\"internalType\":\"struct Gear.ComputationSettings\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_decoderImpl\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"createProgramWithDecoder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisTimestamp\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_eraDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_electionDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestCommittedBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lookupGenesisHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxyImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_programId\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_programsIds\",\"type\":\"address[]\"}],\"name\":\"programsCodeIds\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newMirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BlockCommitted(bytes32)\":{\"details\":\"This is an *informational* event, signaling that the block outcome has been committed.\",\"params\":{\"hash\":\"The block hash that was \\\"finalized\\\" in relation to the necessary transitions.\"}},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"This is an *informational* event, signaling the results of code validation.\",\"params\":{\"codeId\":\"The ID of the code that was validated.\",\"valid\":\"The result of the validation: indicates whether the code ID can be used for program creation.\"}},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"This is a *requesting* event, signaling that validators need to download and validate the code from the transaction blob.\",\"params\":{\"blobTxHash\":\"The transaction hash that contains the WASM blob. Set to zero if applied to the current transaction.\",\"codeId\":\"The expected code ID of the applied WASM blob, represented as a Blake2 hash.\"}},\"ComputationSettingsChanged(uint64,uint128)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to change the computation settings. Users and program authors may want to adjust their practices, while validators need to apply the changes internally starting from the next block.\",\"params\":{\"threshold\":\"The amount of Gear gas initially allocated for free to allow the program to decide if it wants to process the incoming message.\",\"wvaraPerSecond\":\"The amount of WVara to be charged from the program's execution balance per second of computation.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NextEraValidatorsCommitted(uint256)\":{\"details\":\"This is an *informational* and *request* event, signaling that validators has been set for the next era.\",\"params\":{\"startTimestamp\":\"timestamp when the new era starts.\"}},\"ProgramCreated(address,bytes32)\":{\"details\":\"This is both an *informational* and *requesting* event, signaling the creation of a new program and its Ethereum mirror. Validators need to initialize it with a zeroed hash state internally.\",\"params\":{\"actorId\":\"ID of the actor that was created. It is accessible inside the co-processor and on Ethereum by this identifier.\",\"codeId\":\"The code ID of the WASM implementation of the created program.\"}},\"StorageSlotChanged()\":{\"details\":\"This is both an *informational* and *requesting* event, signaling that an authority decided to wipe the router state, rendering all previously existing codes and programs ineligible. Validators need to wipe their databases immediately.\"}},\"kind\":\"dev\",\"methods\":{\"commitValidators((address[],uint256),bytes[])\":{\"details\":\"Set validators for the next era.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"events\":{\"BlockCommitted(bytes32)\":{\"notice\":\"Emitted when all necessary state transitions have been applied and states have changed.\"},\"CodeGotValidated(bytes32,bool)\":{\"notice\":\"Emitted when a code, previously requested for validation, receives validation results, so its CodeStatus changed.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"notice\":\"Emitted when a new code validation request is submitted.\"},\"ComputationSettingsChanged(uint64,uint128)\":{\"notice\":\"Emitted when the computation settings have been changed.\"},\"NextEraValidatorsCommitted(uint256)\":{\"notice\":\"Emitted when validators for the next era has been set.\"},\"ProgramCreated(address,bytes32)\":{\"notice\":\"Emitted when a new program within the co-processor is created and is now available on-chain.\"},\"StorageSlotChanged()\":{\"notice\":\"Emitted when the router's storage slot has been changed.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0xf55d01dac75cffdabec6833a79bf3be0c108fc0db10e273daf7adfd3e9e59dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://540002a50a2a1a2b9dafffb976178e55adbf8d3a28db462c69f996921479c6b0\",\"dweb:/ipfs/QmQNAFyMf2FW3U1giM4Yej3zzd1pnxMtAA5GoADj4hTYYD\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x534bf5c25d6003a8ce50b400d20fa460c03169ad7baa90d47a912917c36dfe2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc0cc39c40ea23d3c46e8517e19ebdd877719d3159fa032f2a91802cdd205c79\",\"dweb:/ipfs/QmSoNh7HTkD4TJcBkBKSGSPMMpLUZKE7s9f2G6mjdaJywg\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0\",\"dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49\"]},\"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889\",\"dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1899463c32e174ebde503846dd1b40ddb6d6ba15e21d68b21b8151e97af35a5e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3c91227968491548c006b70f1de87bb1b67a83d72d05faf19ba09ddfe27de3f6\",\"dweb:/ipfs/QmeXXQd2Wk1Jp1rvbysD1hZb3QVXR3sPxkU8UKBfwrKmkm\"]},\"src/IMirrorDecoder.sol\":{\"keccak256\":\"0xdc8493f52a809ac9470823d4c13f329845a10aa90a73bddd791137f3bd8849ac\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fb625d21f8554f1a973a4ace5b5db4cc696b71605592a22eab44576d020ff70d\",\"dweb:/ipfs/Qma98jtpbJ4zYoBHwsCCUtgkeEVZsPFYUZiGwnPSpKsdqx\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x5f6e8be4d5738e41071deb350bd50279df85b4df544d6abe87faaf5ef6a399cf\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://3c8df2e9d20982b1f25e3be114acc735e597ef1cecd8b9f4528080ca982e618b\",\"dweb:/ipfs/QmRZQrTE6o5y5KWdRzE4Usyf3tdFjqs1CGu8kad2PFWEFW\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0xeb1eb08e258df76bce34b94392f4276b38849b8c94f9627081c6ae0a17371c11\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://dc92bef1184e6377a33bfba7faa9bdca8187ecfe3cbf07024f46f8a171e47739\",\"dweb:/ipfs/QmRqups2TbDu2Gm7CKyPvAAEqsgKGWPekpA4giHKaG3PXp\"]},\"src/libraries/Gear.sol\":{\"keccak256\":\"0xa95dec92e5eadb21249fdec7b3246d666e2fbaf6d994030bb75176c642fa15de\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c05bd2a8dacd478bea5797e034f782d8859dcf9a047d1a8250f71f587d9b7831\",\"dweb:/ipfs/QmSTqy7XvzeDpAqtVkSXXCwtyXspe2zkFqVeuDamguoqRF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"threshold","type":"uint64","indexed":false},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128","indexed":false}],"type":"event","name":"ComputationSettingsChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"uint256","name":"startTimestamp","type":"uint256","indexed":false}],"type":"event","name":"NextEraValidatorsCommitted","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"view","type":"function","name":"areValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum Gear.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32[]","name":"_codesIds","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"codesStates","outputs":[{"internalType":"enum Gear.CodeState[]","name":"","type":"uint8[]"}]},{"inputs":[{"internalType":"struct Gear.BlockCommitment[]","name":"_blockCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"bytes32","name":"previousCommittedBlock","type":"bytes32"},{"internalType":"bytes32","name":"predecessorBlock","type":"bytes32"},{"internalType":"struct Gear.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"address","name":"inheritor","type":"address"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct Gear.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct Gear.Message[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct Gear.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct Gear.CodeCommitment[]","name":"_codeCommitments","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[{"internalType":"struct Gear.ValidatorsCommitment","name":"commitment","type":"tuple","components":[{"internalType":"address[]","name":"validators","type":"address[]"},{"internalType":"uint256","name":"eraIndex","type":"uint256"}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitValidators"},{"inputs":[],"stateMutability":"view","type":"function","name":"computeSettings","outputs":[{"internalType":"struct Gear.ComputationSettings","name":"","type":"tuple","components":[{"internalType":"uint64","name":"threshold","type":"uint64"},{"internalType":"uint128","name":"wvaraPerSecond","type":"uint128"}]}]},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_decoderImpl","type":"address"},{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"createProgramWithDecoder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisTimestamp","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"uint256","name":"_eraDuration","type":"uint256"},{"internalType":"uint256","name":"_electionDuration","type":"uint256"},{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestCommittedBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"lookupGenesisHash"},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxyImpl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_programId","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address[]","name":"_programsIds","type":"address[]"}],"stateMutability":"view","type":"function","name":"programsCodeIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"_codeId","type":"bytes32"},{"internalType":"bytes32","name":"_blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"address","name":"newMirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"commitValidators((address[],uint256),bytes[])":{"details":"Set validators for the next era."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0xf55d01dac75cffdabec6833a79bf3be0c108fc0db10e273daf7adfd3e9e59dae","urls":["bzz-raw://540002a50a2a1a2b9dafffb976178e55adbf8d3a28db462c69f996921479c6b0","dweb:/ipfs/QmQNAFyMf2FW3U1giM4Yej3zzd1pnxMtAA5GoADj4hTYYD"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330","urls":["bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf","dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x534bf5c25d6003a8ce50b400d20fa460c03169ad7baa90d47a912917c36dfe2b","urls":["bzz-raw://cc0cc39c40ea23d3c46e8517e19ebdd877719d3159fa032f2a91802cdd205c79","dweb:/ipfs/QmSoNh7HTkD4TJcBkBKSGSPMMpLUZKE7s9f2G6mjdaJywg"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed","urls":["bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0","dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1","urls":["bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889","dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575","urls":["bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e","dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1899463c32e174ebde503846dd1b40ddb6d6ba15e21d68b21b8151e97af35a5e","urls":["bzz-raw://3c91227968491548c006b70f1de87bb1b67a83d72d05faf19ba09ddfe27de3f6","dweb:/ipfs/QmeXXQd2Wk1Jp1rvbysD1hZb3QVXR3sPxkU8UKBfwrKmkm"],"license":"UNLICENSED"},"src/IMirrorDecoder.sol":{"keccak256":"0xdc8493f52a809ac9470823d4c13f329845a10aa90a73bddd791137f3bd8849ac","urls":["bzz-raw://fb625d21f8554f1a973a4ace5b5db4cc696b71605592a22eab44576d020ff70d","dweb:/ipfs/Qma98jtpbJ4zYoBHwsCCUtgkeEVZsPFYUZiGwnPSpKsdqx"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x5f6e8be4d5738e41071deb350bd50279df85b4df544d6abe87faaf5ef6a399cf","urls":["bzz-raw://3c8df2e9d20982b1f25e3be114acc735e597ef1cecd8b9f4528080ca982e618b","dweb:/ipfs/QmRZQrTE6o5y5KWdRzE4Usyf3tdFjqs1CGu8kad2PFWEFW"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0xeb1eb08e258df76bce34b94392f4276b38849b8c94f9627081c6ae0a17371c11","urls":["bzz-raw://dc92bef1184e6377a33bfba7faa9bdca8187ecfe3cbf07024f46f8a171e47739","dweb:/ipfs/QmRqups2TbDu2Gm7CKyPvAAEqsgKGWPekpA4giHKaG3PXp"],"license":"UNLICENSED"},"src/libraries/Gear.sol":{"keccak256":"0xa95dec92e5eadb21249fdec7b3246d666e2fbaf6d994030bb75176c642fa15de","urls":["bzz-raw://c05bd2a8dacd478bea5797e034f782d8859dcf9a047d1a8250f71f587d9b7831","dweb:/ipfs/QmSTqy7XvzeDpAqtVkSXXCwtyXspe2zkFqVeuDamguoqRF"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":69366,"exportedSymbols":{"Clones":[42512],"Gear":[70080],"IMirror":[65178],"IMirrorDecoder":[65215],"IRouter":[65486],"IWrappedVara":[65497],"OwnableUpgradeable":[40332],"ReentrancyGuardTransient":[44307],"Router":[69365],"StorageSlot":[44431]},"nodeType":"SourceUnit","src":"39:16857:120","nodes":[{"id":67813,"nodeType":"PragmaDirective","src":"39:24:120","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":67815,"nodeType":"ImportDirective","src":"65:64:120","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":42513,"symbolAliases":[{"foreign":{"id":67814,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42512,"src":"73:6:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67817,"nodeType":"ImportDirective","src":"130:42:120","nodes":[],"absolutePath":"src/libraries/Gear.sol","file":"./libraries/Gear.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":70081,"symbolAliases":[{"foreign":{"id":67816,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"138:4:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67819,"nodeType":"ImportDirective","src":"173:38:120","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":65179,"symbolAliases":[{"foreign":{"id":67818,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65178,"src":"181:7:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67821,"nodeType":"ImportDirective","src":"212:52:120","nodes":[],"absolutePath":"src/IMirrorDecoder.sol","file":"./IMirrorDecoder.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":65216,"symbolAliases":[{"foreign":{"id":67820,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65215,"src":"220:14:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67823,"nodeType":"ImportDirective","src":"265:38:120","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":65487,"symbolAliases":[{"foreign":{"id":67822,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65486,"src":"273:7:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67825,"nodeType":"ImportDirective","src":"304:48:120","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":65498,"symbolAliases":[{"foreign":{"id":67824,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65497,"src":"312:12:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67827,"nodeType":"ImportDirective","src":"353:101:120","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":40333,"symbolAliases":[{"foreign":{"id":67826,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40332,"src":"361:18:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67829,"nodeType":"ImportDirective","src":"455:100:120","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":44308,"symbolAliases":[{"foreign":{"id":67828,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44307,"src":"463:24:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":67831,"nodeType":"ImportDirective","src":"556:74:120","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":69366,"sourceUnit":44432,"symbolAliases":[{"foreign":{"id":67830,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44431,"src":"564:11:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":69365,"nodeType":"ContractDefinition","src":"690:16205:120","nodes":[{"id":67840,"nodeType":"VariableDeclaration","src":"871:106:120","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"896:12:120","scope":69365,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":67838,"name":"bytes32","nodeType":"ElementaryTypeName","src":"871:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":67839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"911:66:120","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":67848,"nodeType":"FunctionDefinition","src":"1037:53:120","nodes":[],"body":{"id":67847,"nodeType":"Block","src":"1051:39:120","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":67844,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40554,"src":"1061:20:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":67845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1061:22:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67846,"nodeType":"ExpressionStatement","src":"1061:22:120"}]},"documentation":{"id":67841,"nodeType":"StructuredDocumentation","src":"984:48:120","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":67842,"nodeType":"ParameterList","parameters":[],"src":"1048:2:120"},"returnParameters":{"id":67843,"nodeType":"ParameterList","parameters":[],"src":"1051:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":67960,"nodeType":"FunctionDefinition","src":"1096:1289:120","nodes":[],"body":{"id":67959,"nodeType":"Block","src":"1355:1030:120","nodes":[],"statements":[{"expression":{"arguments":[{"id":67869,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67850,"src":"1380:6:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":67868,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40192,"src":"1365:14:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":67870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1365:22:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67871,"nodeType":"ExpressionStatement","src":"1365:22:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":67876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":67873,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1512:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":67874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1518:9:120","memberName":"timestamp","nodeType":"MemberAccess","src":"1512:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":67875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1530:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1512:19:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63757272656e742074696d657374616d70206d7573742062652067726561746572207468616e2030","id":67877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1533:42:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_010a1bc0b39cf96528374edb07c79052766d9dbc6322e9b022f045d426584476","typeString":"literal_string \"current timestamp must be greater than 0\""},"value":"current timestamp must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_010a1bc0b39cf96528374edb07c79052766d9dbc6322e9b022f045d426584476","typeString":"literal_string \"current timestamp must be greater than 0\""}],"id":67872,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1504:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1504:72:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67879,"nodeType":"ExpressionStatement","src":"1504:72:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":67883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67881,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67860,"src":"1594:17:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":67882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1614:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1594:21:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656c656374696f6e206475726174696f6e206d7573742062652067726561746572207468616e2030","id":67884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1617:42:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_22f70577ade1b9c6246323ca38a4066fa51456aa417f5a924af9df8299c24ade","typeString":"literal_string \"election duration must be greater than 0\""},"value":"election duration must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_22f70577ade1b9c6246323ca38a4066fa51456aa417f5a924af9df8299c24ade","typeString":"literal_string \"election duration must be greater than 0\""}],"id":67880,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1586:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1586:74:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67886,"nodeType":"ExpressionStatement","src":"1586:74:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":67890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":67888,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67858,"src":"1678:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":67889,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67860,"src":"1693:17:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1678:32:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"657261206475726174696f6e206d7573742062652067726561746572207468616e20656c656374696f6e206475726174696f6e","id":67891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1712:53:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_07fe5d445d3047744132d2b933786d7532224c888580fad1eb3bf2fab68d889a","typeString":"literal_string \"era duration must be greater than election duration\""},"value":"era duration must be greater than election duration"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_07fe5d445d3047744132d2b933786d7532224c888580fad1eb3bf2fab68d889a","typeString":"literal_string \"era duration must be greater than election duration\""}],"id":67887,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1670:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":67892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1670:96:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67893,"nodeType":"ExpressionStatement","src":"1670:96:120"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":67895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1793:25:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":67894,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69364,"src":"1777:15:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":67896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:42:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67897,"nodeType":"ExpressionStatement","src":"1777:42:120"},{"assignments":[67900],"declarations":[{"constant":false,"id":67900,"mutability":"mutable","name":"router","nameLocation":"1845:6:120","nodeType":"VariableDeclaration","scope":67959,"src":"1829:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":67899,"nodeType":"UserDefinedTypeName","pathNode":{"id":67898,"name":"Storage","nameLocations":["1829:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"1829:7:120"},"referencedDeclaration":65258,"src":"1829:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":67903,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":67901,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"1854:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":67902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1829:34:120"},{"expression":{"id":67910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":67904,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67900,"src":"1874:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1881:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"1874:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":67907,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"1896:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1901:10:120","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":69800,"src":"1896:15:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$69557_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":67909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1896:17:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"1874:39:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":67911,"nodeType":"ExpressionStatement","src":"1874:39:120"},{"expression":{"id":67921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":67912,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67900,"src":"1923:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1930:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"1923:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":67917,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67852,"src":"1963:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67918,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67854,"src":"1972:12:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":67919,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67856,"src":"1986:12:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":67915,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"1946:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:11:120","memberName":"AddressBook","nodeType":"MemberAccess","referencedDeclaration":69512,"src":"1946:16:120","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddressBook_$69512_storage_ptr_$","typeString":"type(struct Gear.AddressBook storage pointer)"}},"id":67920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1946:53:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_memory_ptr","typeString":"struct Gear.AddressBook memory"}},"src":"1923:76:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":67922,"nodeType":"ExpressionStatement","src":"1923:76:120"},{"expression":{"id":67930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":67923,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67900,"src":"2009:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2016:18:120","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":65245,"src":"2009:25:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$69619_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":67927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2035:26:120","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":69612,"src":"2009:52:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":67928,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"2064:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2069:28:120","memberName":"SIGNING_THRESHOLD_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":69492,"src":"2064:33:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2009:88:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":67931,"nodeType":"ExpressionStatement","src":"2009:88:120"},{"expression":{"id":67938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":67932,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67900,"src":"2107:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2114:15:120","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":65249,"src":"2107:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":67935,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"2132:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2137:26:120","memberName":"defaultComputationSettings","nodeType":"MemberAccess","referencedDeclaration":69747,"src":"2132:31:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ComputationSettings_$69550_memory_ptr_$","typeString":"function () pure returns (struct Gear.ComputationSettings memory)"}},"id":67937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2132:33:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_memory_ptr","typeString":"struct Gear.ComputationSettings memory"}},"src":"2107:58:120","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":67939,"nodeType":"ExpressionStatement","src":"2107:58:120"},{"expression":{"id":67948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":67940,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67900,"src":"2175:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2182:9:120","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":65253,"src":"2175:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":67945,"name":"_eraDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67858,"src":"2209:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":67946,"name":"_electionDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67860,"src":"2223:17:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":67943,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"2194:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2199:9:120","memberName":"Timelines","nodeType":"MemberAccess","referencedDeclaration":69610,"src":"2194:14:120","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Timelines_$69610_storage_ptr_$","typeString":"type(struct Gear.Timelines storage pointer)"}},"id":67947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2194:47:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_memory_ptr","typeString":"struct Gear.Timelines memory"}},"src":"2175:66:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"id":67949,"nodeType":"ExpressionStatement","src":"2175:66:120"},{"expression":{"arguments":[{"expression":{"expression":{"id":67951,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67900,"src":"2310:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67952,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2317:18:120","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":65245,"src":"2310:25:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$69619_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":67953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2336:11:120","memberName":"validators0","nodeType":"MemberAccess","referencedDeclaration":69615,"src":"2310:37:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage","typeString":"struct Gear.Validators storage ref"}},{"id":67954,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67863,"src":"2349:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"expression":{"id":67955,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2362:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":67956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2368:9:120","memberName":"timestamp","nodeType":"MemberAccess","src":"2362:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$69505_storage","typeString":"struct Gear.Validators storage ref"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":67950,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69294,"src":"2293:16:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$69505_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,address[] memory,uint256)"}},"id":67957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:85:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67958,"nodeType":"ExpressionStatement","src":"2293:85:120"}]},"functionSelector":"b1669a33","implemented":true,"kind":"function","modifiers":[{"id":67866,"kind":"modifierInvocation","modifierName":{"id":67865,"name":"initializer","nameLocations":["1343:11:120"],"nodeType":"IdentifierPath","referencedDeclaration":40440,"src":"1343:11:120"},"nodeType":"ModifierInvocation","src":"1343:11:120"}],"name":"initialize","nameLocation":"1105:10:120","parameters":{"id":67864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67850,"mutability":"mutable","name":"_owner","nameLocation":"1133:6:120","nodeType":"VariableDeclaration","scope":67960,"src":"1125:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67849,"name":"address","nodeType":"ElementaryTypeName","src":"1125:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67852,"mutability":"mutable","name":"_mirror","nameLocation":"1157:7:120","nodeType":"VariableDeclaration","scope":67960,"src":"1149:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67851,"name":"address","nodeType":"ElementaryTypeName","src":"1149:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67854,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1182:12:120","nodeType":"VariableDeclaration","scope":67960,"src":"1174:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67853,"name":"address","nodeType":"ElementaryTypeName","src":"1174:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67856,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1212:12:120","nodeType":"VariableDeclaration","scope":67960,"src":"1204:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":67855,"name":"address","nodeType":"ElementaryTypeName","src":"1204:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67858,"mutability":"mutable","name":"_eraDuration","nameLocation":"1242:12:120","nodeType":"VariableDeclaration","scope":67960,"src":"1234:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":67857,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":67860,"mutability":"mutable","name":"_electionDuration","nameLocation":"1272:17:120","nodeType":"VariableDeclaration","scope":67960,"src":"1264:25:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":67859,"name":"uint256","nodeType":"ElementaryTypeName","src":"1264:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":67863,"mutability":"mutable","name":"_validators","nameLocation":"1318:11:120","nodeType":"VariableDeclaration","scope":67960,"src":"1299:30:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":67861,"name":"address","nodeType":"ElementaryTypeName","src":"1299:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":67862,"nodeType":"ArrayTypeName","src":"1299:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1115:220:120"},"returnParameters":{"id":67867,"nodeType":"ParameterList","parameters":[],"src":"1355:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":68037,"nodeType":"FunctionDefinition","src":"2391:1409:120","nodes":[],"body":{"id":68036,"nodeType":"Block","src":"2449:1351:120","nodes":[],"statements":[{"assignments":[67970],"declarations":[{"constant":false,"id":67970,"mutability":"mutable","name":"oldRouter","nameLocation":"2475:9:120","nodeType":"VariableDeclaration","scope":68036,"src":"2459:25:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":67969,"nodeType":"UserDefinedTypeName","pathNode":{"id":67968,"name":"Storage","nameLocations":["2459:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"2459:7:120"},"referencedDeclaration":65258,"src":"2459:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":67973,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":67971,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"2487:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":67972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2487:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2459:37:120"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":67975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2523:25:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":67974,"name":"_setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69364,"src":"2507:15:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":67976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2507:42:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":67977,"nodeType":"ExpressionStatement","src":"2507:42:120"},{"assignments":[67980],"declarations":[{"constant":false,"id":67980,"mutability":"mutable","name":"newRouter","nameLocation":"2575:9:120","nodeType":"VariableDeclaration","scope":68036,"src":"2559:25:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":67979,"nodeType":"UserDefinedTypeName","pathNode":{"id":67978,"name":"Storage","nameLocations":["2559:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"2559:7:120"},"referencedDeclaration":65258,"src":"2559:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":67983,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":67981,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"2587:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":67982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2587:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2559:37:120"},{"expression":{"id":67990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":67984,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67980,"src":"2648:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2658:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"2648:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":67987,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"2673:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":67988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2678:10:120","memberName":"newGenesis","nodeType":"MemberAccess","referencedDeclaration":69800,"src":"2673:15:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_GenesisBlockInfo_$69557_memory_ptr_$","typeString":"function () view returns (struct Gear.GenesisBlockInfo memory)"}},"id":67989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2673:17:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_memory_ptr","typeString":"struct Gear.GenesisBlockInfo memory"}},"src":"2648:42:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":67991,"nodeType":"ExpressionStatement","src":"2648:42:120"},{"expression":{"id":67997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":67992,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67980,"src":"2816:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2826:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"2816:23:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":67995,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67970,"src":"2842:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":67996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2852:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"2842:23:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"src":"2816:49:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":67998,"nodeType":"ExpressionStatement","src":"2816:49:120"},{"expression":{"id":68007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":67999,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67980,"src":"2942:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2952:18:120","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":65245,"src":"2942:28:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$69619_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":68003,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2971:26:120","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":69612,"src":"2942:55:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":68004,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67970,"src":"3012:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3022:18:120","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":65245,"src":"3012:28:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$69619_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":68006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3041:26:120","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":69612,"src":"3012:55:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2942:125:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":68008,"nodeType":"ExpressionStatement","src":"2942:125:120"},{"expression":{"arguments":[{"expression":{"expression":{"id":68010,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67980,"src":"3380:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68011,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3390:18:120","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":65245,"src":"3380:28:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$69619_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":68012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3409:11:120","memberName":"validators0","nodeType":"MemberAccess","referencedDeclaration":69615,"src":"3380:40:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage","typeString":"struct Gear.Validators storage ref"}},{"expression":{"arguments":[{"id":68015,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67970,"src":"3448:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":68013,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"3422:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3427:20:120","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":69946,"src":"3422:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$returns$_t_struct$_Validators_$69505_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":68016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3422:36:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":68017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3459:4:120","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":69502,"src":"3422:41:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},{"expression":{"id":68018,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3465:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":68019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3471:9:120","memberName":"timestamp","nodeType":"MemberAccess","src":"3465:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$69505_storage","typeString":"struct Gear.Validators storage ref"},{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":68009,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69294,"src":"3350:16:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$69505_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,address[] memory,uint256)"}},"id":68020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3350:140:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68021,"nodeType":"ExpressionStatement","src":"3350:140:120"},{"expression":{"id":68027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":68022,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67980,"src":"3559:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3569:15:120","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":65249,"src":"3559:25:120","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":68025,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67970,"src":"3587:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3597:15:120","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":65249,"src":"3587:25:120","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"src":"3559:53:120","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"id":68028,"nodeType":"ExpressionStatement","src":"3559:53:120"},{"expression":{"id":68034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":68029,"name":"newRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67980,"src":"3670:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3680:9:120","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":65253,"src":"3670:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":68032,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67970,"src":"3692:9:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3702:9:120","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":65253,"src":"3692:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"src":"3670:41:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"id":68035,"nodeType":"ExpressionStatement","src":"3670:41:120"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":67963,"kind":"modifierInvocation","modifierName":{"id":67962,"name":"onlyOwner","nameLocations":["2422:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":40227,"src":"2422:9:120"},"nodeType":"ModifierInvocation","src":"2422:9:120"},{"arguments":[{"hexValue":"32","id":67965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2446:1:120","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":67966,"kind":"modifierInvocation","modifierName":{"id":67964,"name":"reinitializer","nameLocations":["2432:13:120"],"nodeType":"IdentifierPath","referencedDeclaration":40487,"src":"2432:13:120"},"nodeType":"ModifierInvocation","src":"2432:16:120"}],"name":"reinitialize","nameLocation":"2400:12:120","parameters":{"id":67961,"nodeType":"ParameterList","parameters":[],"src":"2412:2:120"},"returnParameters":{"id":67967,"nodeType":"ParameterList","parameters":[],"src":"2449:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":68048,"nodeType":"FunctionDefinition","src":"3822:109:120","nodes":[],"body":{"id":68047,"nodeType":"Block","src":"3880:51:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68042,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"3897:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3897:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3907:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"3897:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68045,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3920:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69552,"src":"3897:27:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":68041,"id":68046,"nodeType":"Return","src":"3890:34:120"}]},"baseFunctions":[65304],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"3831:16:120","parameters":{"id":68038,"nodeType":"ParameterList","parameters":[],"src":"3847:2:120"},"returnParameters":{"id":68041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68048,"src":"3871:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68039,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3871:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3870:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68059,"nodeType":"FunctionDefinition","src":"3937:113:120","nodes":[],"body":{"id":68058,"nodeType":"Block","src":"3994:56:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68053,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"4011:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4011:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68055,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4021:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"4011:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4034:9:120","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":69556,"src":"4011:32:120","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":68052,"id":68057,"nodeType":"Return","src":"4004:39:120"}]},"baseFunctions":[65309],"functionSelector":"cacf66ab","implemented":true,"kind":"function","modifiers":[],"name":"genesisTimestamp","nameLocation":"3946:16:120","parameters":{"id":68049,"nodeType":"ParameterList","parameters":[],"src":"3962:2:120"},"returnParameters":{"id":68052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68051,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68059,"src":"3986:6:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":68050,"name":"uint48","nodeType":"ElementaryTypeName","src":"3986:6:120","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"3985:8:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68070,"nodeType":"FunctionDefinition","src":"4056:125:120","nodes":[],"body":{"id":68069,"nodeType":"Block","src":"4122:59:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68064,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"4139:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4139:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4149:20:120","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":65237,"src":"4139:30:120","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$69545_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":68067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4170:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69542,"src":"4139:35:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":68063,"id":68068,"nodeType":"Return","src":"4132:42:120"}]},"baseFunctions":[65314],"functionSelector":"c9f16a11","implemented":true,"kind":"function","modifiers":[],"name":"latestCommittedBlockHash","nameLocation":"4065:24:120","parameters":{"id":68060,"nodeType":"ParameterList","parameters":[],"src":"4089:2:120"},"returnParameters":{"id":68063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68062,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68070,"src":"4113:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68061,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4113:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4112:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68081,"nodeType":"FunctionDefinition","src":"4187:106:120","nodes":[],"body":{"id":68080,"nodeType":"Block","src":"4239:54:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68075,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"4256:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4256:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4266:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"4256:23:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":68078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4280:6:120","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":69507,"src":"4256:30:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":68074,"id":68079,"nodeType":"Return","src":"4249:37:120"}]},"baseFunctions":[65319],"functionSelector":"e6fabc09","implemented":true,"kind":"function","modifiers":[],"name":"mirrorImpl","nameLocation":"4196:10:120","parameters":{"id":68071,"nodeType":"ParameterList","parameters":[],"src":"4206:2:120"},"returnParameters":{"id":68074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68073,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68081,"src":"4230:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68072,"name":"address","nodeType":"ElementaryTypeName","src":"4230:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4229:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68092,"nodeType":"FunctionDefinition","src":"4299:116:120","nodes":[],"body":{"id":68091,"nodeType":"Block","src":"4356:59:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68086,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"4373:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4373:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4383:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"4373:23:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":68089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4397:11:120","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":69509,"src":"4373:35:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":68085,"id":68090,"nodeType":"Return","src":"4366:42:120"}]},"baseFunctions":[65324],"functionSelector":"65ecfea2","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxyImpl","nameLocation":"4308:15:120","parameters":{"id":68082,"nodeType":"ParameterList","parameters":[],"src":"4323:2:120"},"returnParameters":{"id":68085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68092,"src":"4347:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68083,"name":"address","nodeType":"ElementaryTypeName","src":"4347:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4346:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68103,"nodeType":"FunctionDefinition","src":"4421:112:120","nodes":[],"body":{"id":68102,"nodeType":"Block","src":"4474:59:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68097,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"4491:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4491:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4501:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"4491:23:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":68100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4515:11:120","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":69511,"src":"4491:35:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":68096,"id":68101,"nodeType":"Return","src":"4484:42:120"}]},"baseFunctions":[65329],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"4430:11:120","parameters":{"id":68093,"nodeType":"ParameterList","parameters":[],"src":"4441:2:120"},"returnParameters":{"id":68096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68095,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68103,"src":"4465:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68094,"name":"address","nodeType":"ElementaryTypeName","src":"4465:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4464:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68149,"nodeType":"FunctionDefinition","src":"4539:375:120","nodes":[],"body":{"id":68148,"nodeType":"Block","src":"4621:293:120","nodes":[],"statements":[{"assignments":[68115],"declarations":[{"constant":false,"id":68115,"mutability":"mutable","name":"_currentValidators","nameLocation":"4655:18:120","nodeType":"VariableDeclaration","scope":68148,"src":"4631:42:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":68114,"nodeType":"UserDefinedTypeName","pathNode":{"id":68113,"name":"Gear.Validators","nameLocations":["4631:4:120","4636:10:120"],"nodeType":"IdentifierPath","referencedDeclaration":69505,"src":"4631:15:120"},"referencedDeclaration":69505,"src":"4631:15:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"}],"id":68121,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":68118,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"4702:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4702:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":68116,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"4676:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4681:20:120","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":69946,"src":"4676:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$returns$_t_struct$_Validators_$69505_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":68120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4676:36:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4631:81:120"},{"body":{"id":68144,"nodeType":"Block","src":"4772:114:120","statements":[{"condition":{"id":68139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4790:39:120","subExpression":{"baseExpression":{"expression":{"id":68133,"name":"_currentValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68115,"src":"4791:18:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":68134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4810:3:120","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":69499,"src":"4791:22:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":68138,"indexExpression":{"baseExpression":{"id":68135,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68106,"src":"4814:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":68137,"indexExpression":{"id":68136,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68123,"src":"4826:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4814:14:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4791:38:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":68143,"nodeType":"IfStatement","src":"4786:90:120","trueBody":{"id":68142,"nodeType":"Block","src":"4831:45:120","statements":[{"expression":{"hexValue":"66616c7365","id":68140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4856:5:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":68110,"id":68141,"nodeType":"Return","src":"4849:12:120"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68126,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68123,"src":"4743:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":68127,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68106,"src":"4747:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":68128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4759:6:120","memberName":"length","nodeType":"MemberAccess","src":"4747:18:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4743:22:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":68145,"initializationExpression":{"assignments":[68123],"declarations":[{"constant":false,"id":68123,"mutability":"mutable","name":"i","nameLocation":"4736:1:120","nodeType":"VariableDeclaration","scope":68145,"src":"4728:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68122,"name":"uint256","nodeType":"ElementaryTypeName","src":"4728:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":68125,"initialValue":{"hexValue":"30","id":68124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4740:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4728:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":68131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4767:3:120","subExpression":{"id":68130,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68123,"src":"4767:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":68132,"nodeType":"ExpressionStatement","src":"4767:3:120"},"nodeType":"ForStatement","src":"4723:163:120"},{"expression":{"hexValue":"74727565","id":68146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4903:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":68110,"id":68147,"nodeType":"Return","src":"4896:11:120"}]},"baseFunctions":[65337],"functionSelector":"8f381dbe","implemented":true,"kind":"function","modifiers":[],"name":"areValidators","nameLocation":"4548:13:120","parameters":{"id":68107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68106,"mutability":"mutable","name":"_validators","nameLocation":"4581:11:120","nodeType":"VariableDeclaration","scope":68149,"src":"4562:30:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":68104,"name":"address","nodeType":"ElementaryTypeName","src":"4562:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":68105,"nodeType":"ArrayTypeName","src":"4562:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4561:32:120"},"returnParameters":{"id":68110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68109,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68149,"src":"4615:4:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":68108,"name":"bool","nodeType":"ElementaryTypeName","src":"4615:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4614:6:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68166,"nodeType":"FunctionDefinition","src":"4920:144:120","nodes":[],"body":{"id":68165,"nodeType":"Block","src":"4988:76:120","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":68158,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"5031:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5031:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":68156,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"5005:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5010:20:120","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":69946,"src":"5005:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$returns$_t_struct$_Validators_$69505_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":68160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5005:36:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":68161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5042:3:120","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":69499,"src":"5005:40:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":68163,"indexExpression":{"id":68162,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68151,"src":"5046:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5005:52:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":68155,"id":68164,"nodeType":"Return","src":"4998:59:120"}]},"baseFunctions":[65344],"functionSelector":"facd743b","implemented":true,"kind":"function","modifiers":[],"name":"isValidator","nameLocation":"4929:11:120","parameters":{"id":68152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68151,"mutability":"mutable","name":"_validator","nameLocation":"4949:10:120","nodeType":"VariableDeclaration","scope":68166,"src":"4941:18:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68150,"name":"address","nodeType":"ElementaryTypeName","src":"4941:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4940:20:120"},"returnParameters":{"id":68155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68166,"src":"4982:4:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":68153,"name":"bool","nodeType":"ElementaryTypeName","src":"4982:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4981:6:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68177,"nodeType":"FunctionDefinition","src":"5070:146:120","nodes":[],"body":{"id":68176,"nodeType":"Block","src":"5137:79:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68171,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"5154:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5154:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5164:18:120","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":65245,"src":"5154:28:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$69619_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":68174,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5183:26:120","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":69612,"src":"5154:55:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":68170,"id":68175,"nodeType":"Return","src":"5147:62:120"}]},"baseFunctions":[65349],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"5079:26:120","parameters":{"id":68167,"nodeType":"ParameterList","parameters":[],"src":"5105:2:120"},"returnParameters":{"id":68170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68169,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68177,"src":"5129:6:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":68168,"name":"uint16","nodeType":"ElementaryTypeName","src":"5129:6:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"5128:8:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68191,"nodeType":"FunctionDefinition","src":"5222:126:120","nodes":[],"body":{"id":68190,"nodeType":"Block","src":"5283:65:120","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":68185,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"5326:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5326:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":68183,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"5300:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5305:20:120","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":69946,"src":"5300:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$returns$_t_struct$_Validators_$69505_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":68187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5300:36:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":68188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5337:4:120","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":69502,"src":"5300:41:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":68182,"id":68189,"nodeType":"Return","src":"5293:48:120"}]},"baseFunctions":[65355],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"5231:10:120","parameters":{"id":68178,"nodeType":"ParameterList","parameters":[],"src":"5241:2:120"},"returnParameters":{"id":68182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68191,"src":"5265:16:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":68179,"name":"address","nodeType":"ElementaryTypeName","src":"5265:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":68180,"nodeType":"ArrayTypeName","src":"5265:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5264:18:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68205,"nodeType":"FunctionDefinition","src":"5354:129:120","nodes":[],"body":{"id":68204,"nodeType":"Block","src":"5411:72:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":68198,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"5454:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5454:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":68196,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"5428:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5433:20:120","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":69946,"src":"5428:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$returns$_t_struct$_Validators_$69505_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":68200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5428:36:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":68201,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5465:4:120","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":69502,"src":"5428:41:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":68202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5470:6:120","memberName":"length","nodeType":"MemberAccess","src":"5428:48:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":68195,"id":68203,"nodeType":"Return","src":"5421:55:120"}]},"baseFunctions":[65360],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"5363:15:120","parameters":{"id":68192,"nodeType":"ParameterList","parameters":[],"src":"5378:2:120"},"returnParameters":{"id":68195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68205,"src":"5402:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68193,"name":"uint256","nodeType":"ElementaryTypeName","src":"5402:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5401:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68232,"nodeType":"FunctionDefinition","src":"5489:284:120","nodes":[],"body":{"id":68231,"nodeType":"Block","src":"5550:223:120","nodes":[],"statements":[{"assignments":[68214],"declarations":[{"constant":false,"id":68214,"mutability":"mutable","name":"router","nameLocation":"5584:6:120","nodeType":"VariableDeclaration","scope":68231,"src":"5560:30:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68213,"nodeType":"UserDefinedTypeName","pathNode":{"id":68212,"name":"IRouter.Storage","nameLocations":["5560:7:120","5568:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"5560:15:120"},"referencedDeclaration":65258,"src":"5560:15:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68217,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68215,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"5593:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5593:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5560:42:120"},{"expression":{"arguments":[{"expression":{"expression":{"arguments":[{"id":68222,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68214,"src":"5683:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":68220,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"5657:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5662:20:120","memberName":"currentEraValidators","nodeType":"MemberAccess","referencedDeclaration":69946,"src":"5657:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$returns$_t_struct$_Validators_$69505_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":68223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5657:33:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":68224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5691:4:120","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":69502,"src":"5657:38:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":68225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5696:6:120","memberName":"length","nodeType":"MemberAccess","src":"5657:45:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":68226,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68214,"src":"5704:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68227,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5711:18:120","memberName":"validationSettings","nodeType":"MemberAccess","referencedDeclaration":65245,"src":"5704:25:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationSettings_$69619_storage","typeString":"struct Gear.ValidationSettings storage ref"}},"id":68228,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5730:26:120","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":69612,"src":"5704:52:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":68218,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"5619:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5624:19:120","memberName":"validatorsThreshold","nodeType":"MemberAccess","referencedDeclaration":70060,"src":"5619:24:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint16_$returns$_t_uint256_$","typeString":"function (uint256,uint16) pure returns (uint256)"}},"id":68229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5619:147:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":68209,"id":68230,"nodeType":"Return","src":"5612:154:120"}]},"baseFunctions":[65365],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"5498:19:120","parameters":{"id":68206,"nodeType":"ParameterList","parameters":[],"src":"5517:2:120"},"returnParameters":{"id":68209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68208,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68232,"src":"5541:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68207,"name":"uint256","nodeType":"ElementaryTypeName","src":"5541:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5540:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68243,"nodeType":"FunctionDefinition","src":"5779:130:120","nodes":[],"body":{"id":68242,"nodeType":"Block","src":"5860:49:120","nodes":[],"statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68238,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"5877:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5877:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5887:15:120","memberName":"computeSettings","nodeType":"MemberAccess","referencedDeclaration":65249,"src":"5877:25:120","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_storage","typeString":"struct Gear.ComputationSettings storage ref"}},"functionReturnParameters":68237,"id":68241,"nodeType":"Return","src":"5870:32:120"}]},"baseFunctions":[65371],"functionSelector":"84d22a4f","implemented":true,"kind":"function","modifiers":[],"name":"computeSettings","nameLocation":"5788:15:120","parameters":{"id":68233,"nodeType":"ParameterList","parameters":[],"src":"5803:2:120"},"returnParameters":{"id":68237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68243,"src":"5827:31:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_memory_ptr","typeString":"struct Gear.ComputationSettings"},"typeName":{"id":68235,"nodeType":"UserDefinedTypeName","pathNode":{"id":68234,"name":"Gear.ComputationSettings","nameLocations":["5827:4:120","5832:19:120"],"nodeType":"IdentifierPath","referencedDeclaration":69550,"src":"5827:24:120"},"referencedDeclaration":69550,"src":"5827:24:120","typeDescriptions":{"typeIdentifier":"t_struct$_ComputationSettings_$69550_storage_ptr","typeString":"struct Gear.ComputationSettings"}},"visibility":"internal"}],"src":"5826:33:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68259,"nodeType":"FunctionDefinition","src":"5915:134:120","nodes":[],"body":{"id":68258,"nodeType":"Block","src":"5988:61:120","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68251,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"6005:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6005:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6015:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"6005:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68254,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6028:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"6005:28:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68256,"indexExpression":{"id":68255,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68245,"src":"6034:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6005:37:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"functionReturnParameters":68250,"id":68257,"nodeType":"Return","src":"5998:44:120"}]},"baseFunctions":[65379],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"5924:9:120","parameters":{"id":68246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68245,"mutability":"mutable","name":"_codeId","nameLocation":"5942:7:120","nodeType":"VariableDeclaration","scope":68259,"src":"5934:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68244,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5934:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5933:17:120"},"returnParameters":{"id":68250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68259,"src":"5972:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"},"typeName":{"id":68248,"nodeType":"UserDefinedTypeName","pathNode":{"id":68247,"name":"Gear.CodeState","nameLocations":["5972:4:120","5977:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":69540,"src":"5972:14:120"},"referencedDeclaration":69540,"src":"5972:14:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"visibility":"internal"}],"src":"5971:16:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68317,"nodeType":"FunctionDefinition","src":"6055:378:120","nodes":[],"body":{"id":68316,"nodeType":"Block","src":"6152:281:120","nodes":[],"statements":[{"assignments":[68271],"declarations":[{"constant":false,"id":68271,"mutability":"mutable","name":"router","nameLocation":"6178:6:120","nodeType":"VariableDeclaration","scope":68316,"src":"6162:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68270,"nodeType":"UserDefinedTypeName","pathNode":{"id":68269,"name":"Storage","nameLocations":["6162:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"6162:7:120"},"referencedDeclaration":65258,"src":"6162:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68274,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68272,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"6187:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6187:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6162:34:120"},{"assignments":[68280],"declarations":[{"constant":false,"id":68280,"mutability":"mutable","name":"res","nameLocation":"6231:3:120","nodeType":"VariableDeclaration","scope":68316,"src":"6207:27:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":68278,"nodeType":"UserDefinedTypeName","pathNode":{"id":68277,"name":"Gear.CodeState","nameLocations":["6207:4:120","6212:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":69540,"src":"6207:14:120"},"referencedDeclaration":69540,"src":"6207:14:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"id":68279,"nodeType":"ArrayTypeName","src":"6207:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"id":68288,"initialValue":{"arguments":[{"expression":{"id":68285,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68262,"src":"6258:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":68286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6268:6:120","memberName":"length","nodeType":"MemberAccess","src":"6258:16:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":68284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6237:20:120","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_enum$_CodeState_$69540_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (enum Gear.CodeState[] memory)"},"typeName":{"baseType":{"id":68282,"nodeType":"UserDefinedTypeName","pathNode":{"id":68281,"name":"Gear.CodeState","nameLocations":["6241:4:120","6246:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":69540,"src":"6241:14:120"},"referencedDeclaration":69540,"src":"6241:14:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"id":68283,"nodeType":"ArrayTypeName","src":"6241:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}}},"id":68287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6237:38:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6207:68:120"},{"body":{"id":68312,"nodeType":"Block","src":"6333:73:120","statements":[{"expression":{"id":68310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":68300,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68280,"src":"6347:3:120","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"id":68302,"indexExpression":{"id":68301,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68290,"src":"6351:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6347:6:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":68303,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68271,"src":"6356:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6363:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"6356:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6376:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"6356:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68309,"indexExpression":{"baseExpression":{"id":68306,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68262,"src":"6382:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":68308,"indexExpression":{"id":68307,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68290,"src":"6392:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6382:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6356:39:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"src":"6347:48:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"id":68311,"nodeType":"ExpressionStatement","src":"6347:48:120"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68293,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68290,"src":"6306:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":68294,"name":"_codesIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68262,"src":"6310:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},"id":68295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6320:6:120","memberName":"length","nodeType":"MemberAccess","src":"6310:16:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6306:20:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":68313,"initializationExpression":{"assignments":[68290],"declarations":[{"constant":false,"id":68290,"mutability":"mutable","name":"i","nameLocation":"6299:1:120","nodeType":"VariableDeclaration","scope":68313,"src":"6291:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68289,"name":"uint256","nodeType":"ElementaryTypeName","src":"6291:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":68292,"initialValue":{"hexValue":"30","id":68291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6303:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6291:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":68298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6328:3:120","subExpression":{"id":68297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68290,"src":"6328:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":68299,"nodeType":"ExpressionStatement","src":"6328:3:120"},"nodeType":"ForStatement","src":"6286:120:120"},{"expression":{"id":68314,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68280,"src":"6423:3:120","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_memory_ptr","typeString":"enum Gear.CodeState[] memory"}},"functionReturnParameters":68268,"id":68315,"nodeType":"Return","src":"6416:10:120"}]},"baseFunctions":[65389],"functionSelector":"82bdeaad","implemented":true,"kind":"function","modifiers":[],"name":"codesStates","nameLocation":"6064:11:120","parameters":{"id":68263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68262,"mutability":"mutable","name":"_codesIds","nameLocation":"6095:9:120","nodeType":"VariableDeclaration","scope":68317,"src":"6076:28:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":68260,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6076:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":68261,"nodeType":"ArrayTypeName","src":"6076:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"6075:30:120"},"returnParameters":{"id":68268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68267,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68317,"src":"6127:23:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_memory_ptr","typeString":"enum Gear.CodeState[]"},"typeName":{"baseType":{"id":68265,"nodeType":"UserDefinedTypeName","pathNode":{"id":68264,"name":"Gear.CodeState","nameLocations":["6127:4:120","6132:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":69540,"src":"6127:14:120"},"referencedDeclaration":69540,"src":"6127:14:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"id":68266,"nodeType":"ArrayTypeName","src":"6127:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_CodeState_$69540_$dyn_storage_ptr","typeString":"enum Gear.CodeState[]"}},"visibility":"internal"}],"src":"6126:25:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68332,"nodeType":"FunctionDefinition","src":"6439:140:120","nodes":[],"body":{"id":68331,"nodeType":"Block","src":"6512:67:120","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68324,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"6529:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6529:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6539:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"6529:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68327,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6552:8:120","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":69578,"src":"6529:31:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":68329,"indexExpression":{"id":68328,"name":"_programId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68319,"src":"6561:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6529:43:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":68323,"id":68330,"nodeType":"Return","src":"6522:50:120"}]},"baseFunctions":[65396],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"6448:13:120","parameters":{"id":68320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68319,"mutability":"mutable","name":"_programId","nameLocation":"6470:10:120","nodeType":"VariableDeclaration","scope":68332,"src":"6462:18:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68318,"name":"address","nodeType":"ElementaryTypeName","src":"6462:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6461:20:120"},"returnParameters":{"id":68323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68322,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68332,"src":"6503:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68321,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6503:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6502:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68387,"nodeType":"FunctionDefinition","src":"6585:376:120","nodes":[],"body":{"id":68386,"nodeType":"Block","src":"6682:279:120","nodes":[],"statements":[{"assignments":[68343],"declarations":[{"constant":false,"id":68343,"mutability":"mutable","name":"router","nameLocation":"6708:6:120","nodeType":"VariableDeclaration","scope":68386,"src":"6692:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68342,"nodeType":"UserDefinedTypeName","pathNode":{"id":68341,"name":"Storage","nameLocations":["6692:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"6692:7:120"},"referencedDeclaration":65258,"src":"6692:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68346,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68344,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"6717:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6717:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6692:34:120"},{"assignments":[68351],"declarations":[{"constant":false,"id":68351,"mutability":"mutable","name":"res","nameLocation":"6754:3:120","nodeType":"VariableDeclaration","scope":68386,"src":"6737:20:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":68349,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6737:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":68350,"nodeType":"ArrayTypeName","src":"6737:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":68358,"initialValue":{"arguments":[{"expression":{"id":68355,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68335,"src":"6774:12:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":68356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6787:6:120","memberName":"length","nodeType":"MemberAccess","src":"6774:19:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":68354,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6760:13:120","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":68352,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6764:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":68353,"nodeType":"ArrayTypeName","src":"6764:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":68357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6760:34:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6737:57:120"},{"body":{"id":68382,"nodeType":"Block","src":"6855:79:120","statements":[{"expression":{"id":68380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":68370,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68351,"src":"6869:3:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":68372,"indexExpression":{"id":68371,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68360,"src":"6873:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6869:6:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"expression":{"id":68373,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68343,"src":"6878:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6885:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"6878:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68375,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6898:8:120","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":69578,"src":"6878:28:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":68379,"indexExpression":{"baseExpression":{"id":68376,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68335,"src":"6907:12:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":68378,"indexExpression":{"id":68377,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68360,"src":"6920:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6907:15:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6878:45:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6869:54:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":68381,"nodeType":"ExpressionStatement","src":"6869:54:120"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68363,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68360,"src":"6825:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":68364,"name":"_programsIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68335,"src":"6829:12:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":68365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6842:6:120","memberName":"length","nodeType":"MemberAccess","src":"6829:19:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6825:23:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":68383,"initializationExpression":{"assignments":[68360],"declarations":[{"constant":false,"id":68360,"mutability":"mutable","name":"i","nameLocation":"6818:1:120","nodeType":"VariableDeclaration","scope":68383,"src":"6810:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68359,"name":"uint256","nodeType":"ElementaryTypeName","src":"6810:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":68362,"initialValue":{"hexValue":"30","id":68361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6822:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6810:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":68368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6850:3:120","subExpression":{"id":68367,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68360,"src":"6850:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":68369,"nodeType":"ExpressionStatement","src":"6850:3:120"},"nodeType":"ForStatement","src":"6805:129:120"},{"expression":{"id":68384,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68351,"src":"6951:3:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":68340,"id":68385,"nodeType":"Return","src":"6944:10:120"}]},"baseFunctions":[65405],"functionSelector":"baaf0201","implemented":true,"kind":"function","modifiers":[],"name":"programsCodeIds","nameLocation":"6594:15:120","parameters":{"id":68336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68335,"mutability":"mutable","name":"_programsIds","nameLocation":"6629:12:120","nodeType":"VariableDeclaration","scope":68387,"src":"6610:31:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":68333,"name":"address","nodeType":"ElementaryTypeName","src":"6610:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":68334,"nodeType":"ArrayTypeName","src":"6610:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6609:33:120"},"returnParameters":{"id":68340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68339,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68387,"src":"6664:16:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":68337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6664:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":68338,"nodeType":"ArrayTypeName","src":"6664:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"6663:18:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68398,"nodeType":"FunctionDefinition","src":"6967:115:120","nodes":[],"body":{"id":68397,"nodeType":"Block","src":"7022:60:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68392,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"7039:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7039:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68394,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7049:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"7039:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7062:13:120","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":69580,"src":"7039:36:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":68391,"id":68396,"nodeType":"Return","src":"7032:43:120"}]},"baseFunctions":[65410],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"6976:13:120","parameters":{"id":68388,"nodeType":"ParameterList","parameters":[],"src":"6989:2:120"},"returnParameters":{"id":68391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68398,"src":"7013:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68389,"name":"uint256","nodeType":"ElementaryTypeName","src":"7013:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7012:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68409,"nodeType":"FunctionDefinition","src":"7088:127:120","nodes":[],"body":{"id":68408,"nodeType":"Block","src":"7149:66:120","nodes":[],"statements":[{"expression":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68403,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"7166:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7166:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7176:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"7166:22:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7189:19:120","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":69582,"src":"7166:42:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":68402,"id":68407,"nodeType":"Return","src":"7159:49:120"}]},"baseFunctions":[65415],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"7097:19:120","parameters":{"id":68399,"nodeType":"ParameterList","parameters":[],"src":"7116:2:120"},"returnParameters":{"id":68402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68409,"src":"7140:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68400,"name":"uint256","nodeType":"ElementaryTypeName","src":"7140:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7139:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":68424,"nodeType":"FunctionDefinition","src":"7241:116:120","nodes":[],"body":{"id":68423,"nodeType":"Block","src":"7298:59:120","nodes":[],"statements":[{"expression":{"id":68421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":68416,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"7308:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7308:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7318:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"7308:23:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":68419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7332:6:120","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":69507,"src":"7308:30:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":68420,"name":"newMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68411,"src":"7341:9:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7308:42:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":68422,"nodeType":"ExpressionStatement","src":"7308:42:120"}]},"baseFunctions":[65420],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":68414,"kind":"modifierInvocation","modifierName":{"id":68413,"name":"onlyOwner","nameLocations":["7288:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":40227,"src":"7288:9:120"},"nodeType":"ModifierInvocation","src":"7288:9:120"}],"name":"setMirror","nameLocation":"7250:9:120","parameters":{"id":68412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68411,"mutability":"mutable","name":"newMirror","nameLocation":"7268:9:120","nodeType":"VariableDeclaration","scope":68424,"src":"7260:17:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68410,"name":"address","nodeType":"ElementaryTypeName","src":"7260:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7259:19:120"},"returnParameters":{"id":68415,"nodeType":"ParameterList","parameters":[],"src":"7298:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68476,"nodeType":"FunctionDefinition","src":"7379:398:120","nodes":[],"body":{"id":68475,"nodeType":"Block","src":"7417:360:120","nodes":[],"statements":[{"assignments":[68429],"declarations":[{"constant":false,"id":68429,"mutability":"mutable","name":"router","nameLocation":"7443:6:120","nodeType":"VariableDeclaration","scope":68475,"src":"7427:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68428,"nodeType":"UserDefinedTypeName","pathNode":{"id":68427,"name":"Storage","nameLocations":["7427:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"7427:7:120"},"referencedDeclaration":65258,"src":"7427:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68432,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68430,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"7452:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7452:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7427:34:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":68434,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68429,"src":"7480:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7487:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"7480:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7500:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69552,"src":"7480:24:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":68439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7516:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7508:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":68437,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7508:7:120","typeDescriptions":{}}},"id":68440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7508:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7480:38:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"67656e65736973206861736820616c726561647920736574","id":68442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7520:26:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""},"value":"genesis hash already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ec654a5a6e0b043639db348d1557e0acfcdb8bbf2c9de24c4983866c0ccfa21","typeString":"literal_string \"genesis hash already set\""}],"id":68433,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7472:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7472:75:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68444,"nodeType":"ExpressionStatement","src":"7472:75:120"},{"assignments":[68446],"declarations":[{"constant":false,"id":68446,"mutability":"mutable","name":"genesisHash","nameLocation":"7566:11:120","nodeType":"VariableDeclaration","scope":68475,"src":"7558:19:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68445,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7558:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":68452,"initialValue":{"arguments":[{"expression":{"expression":{"id":68448,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68429,"src":"7590:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7597:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"7590:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68450,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7610:6:120","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":69554,"src":"7590:26:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":68447,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"7580:9:120","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":68451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7580:37:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7558:59:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68454,"name":"genesisHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68446,"src":"7636:11:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":68457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7659:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7651:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":68455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7651:7:120","typeDescriptions":{}}},"id":68458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7651:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7636:25:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e61626c6520746f206c6f6f6b75702067656e657369732068617368","id":68460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7663:31:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""},"value":"unable to lookup genesis hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_983585e130902c48e8b21c3e7ab53cd0d7f3ffc3109244b201330c039df8ce4e","typeString":"literal_string \"unable to lookup genesis hash\""}],"id":68453,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7628:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7628:67:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68462,"nodeType":"ExpressionStatement","src":"7628:67:120"},{"expression":{"id":68473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":68463,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68429,"src":"7706:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7713:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"7706:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7726:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69552,"src":"7706:24:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":68469,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68429,"src":"7743:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7750:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"7743:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7763:6:120","memberName":"number","nodeType":"MemberAccess","referencedDeclaration":69554,"src":"7743:26:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":68468,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"7733:9:120","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":68472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7733:37:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7706:64:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":68474,"nodeType":"ExpressionStatement","src":"7706:64:120"}]},"baseFunctions":[65423],"functionSelector":"8b1edf1e","implemented":true,"kind":"function","modifiers":[],"name":"lookupGenesisHash","nameLocation":"7388:17:120","parameters":{"id":68425,"nodeType":"ParameterList","parameters":[],"src":"7405:2:120"},"returnParameters":{"id":68426,"nodeType":"ParameterList","parameters":[],"src":"7417:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68545,"nodeType":"FunctionDefinition","src":"7783:637:120","nodes":[],"body":{"id":68544,"nodeType":"Block","src":"7861:559:120","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":68492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68484,"name":"_blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68480,"src":"7879:11:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":68485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7894:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7879:16:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":68488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7908:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68487,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"7899:8:120","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":68489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7899:11:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":68490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7914:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7899:16:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7879:36:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f622063616e277420626520666f756e64","id":68493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7917:21:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_50f679c075644435e0dfad2beb36f786441d5cb0c0dd08ea9c9aa80169c123d2","typeString":"literal_string \"blob can't be found\""},"value":"blob can't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_50f679c075644435e0dfad2beb36f786441d5cb0c0dd08ea9c9aa80169c123d2","typeString":"literal_string \"blob can't be found\""}],"id":68483,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7871:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7871:68:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68495,"nodeType":"ExpressionStatement","src":"7871:68:120"},{"assignments":[68498],"declarations":[{"constant":false,"id":68498,"mutability":"mutable","name":"router","nameLocation":"7966:6:120","nodeType":"VariableDeclaration","scope":68544,"src":"7950:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68497,"nodeType":"UserDefinedTypeName","pathNode":{"id":68496,"name":"Storage","nameLocations":["7950:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"7950:7:120"},"referencedDeclaration":65258,"src":"7950:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68501,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68499,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"7975:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7975:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7950:34:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":68503,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68498,"src":"8002:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8009:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"8002:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8022:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69552,"src":"8002:24:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":68508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8038:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8030:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":68506,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8030:7:120","typeDescriptions":{}}},"id":68509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8030:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8002:38:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":68511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8042:58:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":68502,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7994:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7994:107:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68513,"nodeType":"ExpressionStatement","src":"7994:107:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"},"id":68523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":68515,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68498,"src":"8133:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8140:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"8133:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8153:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"8133:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68519,"indexExpression":{"id":68518,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68478,"src":"8159:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8133:34:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":68520,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"8171:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8176:9:120","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":69540,"src":"8171:14:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$69540_$","typeString":"type(enum Gear.CodeState)"}},"id":68522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8186:7:120","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":69537,"src":"8171:22:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"src":"8133:60:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"676976656e20636f646520696420697320616c7265616479206f6e2076616c69646174696f6e206f722076616c696461746564","id":68524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8207:53:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""},"value":"given code id is already on validation or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6767c8b133cc7e7263c64dbd155947c93c4fdbe1adf907d9d3428673190ae536","typeString":"literal_string \"given code id is already on validation or validated\""}],"id":68514,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8112:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8112:158:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68526,"nodeType":"ExpressionStatement","src":"8112:158:120"},{"expression":{"id":68537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":68527,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68498,"src":"8281:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8288:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"8281:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68532,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8301:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"8281:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68533,"indexExpression":{"id":68530,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68478,"src":"8307:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8281:34:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":68534,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"8318:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8323:9:120","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":69540,"src":"8318:14:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$69540_$","typeString":"type(enum Gear.CodeState)"}},"id":68536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8333:19:120","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":69538,"src":"8318:34:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"src":"8281:71:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"id":68538,"nodeType":"ExpressionStatement","src":"8281:71:120"},{"eventCall":{"arguments":[{"id":68540,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68478,"src":"8392:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68541,"name":"_blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68480,"src":"8401:11:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":68539,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65277,"src":"8368:23:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":68542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8368:45:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68543,"nodeType":"EmitStatement","src":"8363:50:120"}]},"baseFunctions":[65431],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"7792:21:120","parameters":{"id":68481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68478,"mutability":"mutable","name":"_codeId","nameLocation":"7822:7:120","nodeType":"VariableDeclaration","scope":68545,"src":"7814:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68477,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7814:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":68480,"mutability":"mutable","name":"_blobTxHash","nameLocation":"7839:11:120","nodeType":"VariableDeclaration","scope":68545,"src":"7831:19:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68479,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7831:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7813:38:120"},"returnParameters":{"id":68482,"nodeType":"ParameterList","parameters":[],"src":"7861:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68576,"nodeType":"FunctionDefinition","src":"8426:231:120","nodes":[],"body":{"id":68575,"nodeType":"Block","src":"8508:149:120","nodes":[],"statements":[{"assignments":[68555],"declarations":[{"constant":false,"id":68555,"mutability":"mutable","name":"mirror","nameLocation":"8526:6:120","nodeType":"VariableDeclaration","scope":68575,"src":"8518:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68554,"name":"address","nodeType":"ElementaryTypeName","src":"8518:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":68560,"initialValue":{"arguments":[{"id":68557,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68547,"src":"8550:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68558,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68549,"src":"8559:5:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":68556,"name":"_createProgram","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69031,"src":"8535:14:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,bytes32) returns (address)"}},"id":68559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8535:30:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8518:47:120"},{"expression":{"arguments":[{"expression":{"id":68565,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8603:3:120","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":68566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8607:6:120","memberName":"sender","nodeType":"MemberAccess","src":"8603:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":68569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8623:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8615:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":68567,"name":"address","nodeType":"ElementaryTypeName","src":"8615:7:120","typeDescriptions":{}}},"id":68570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8615:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":68562,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68555,"src":"8584:6:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":68561,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65178,"src":"8576:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$65178_$","typeString":"type(contract IMirror)"}},"id":68563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8576:15:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$65178","typeString":"contract IMirror"}},"id":68564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8592:10:120","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":65169,"src":"8576:26:120","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":68571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8576:50:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68572,"nodeType":"ExpressionStatement","src":"8576:50:120"},{"expression":{"id":68573,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68555,"src":"8644:6:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":68553,"id":68574,"nodeType":"Return","src":"8637:13:120"}]},"baseFunctions":[65441],"functionSelector":"527de0f9","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"8435:13:120","parameters":{"id":68550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68547,"mutability":"mutable","name":"_codeId","nameLocation":"8457:7:120","nodeType":"VariableDeclaration","scope":68576,"src":"8449:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8449:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":68549,"mutability":"mutable","name":"_salt","nameLocation":"8474:5:120","nodeType":"VariableDeclaration","scope":68576,"src":"8466:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68548,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8466:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8448:32:120"},"returnParameters":{"id":68553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68576,"src":"8499:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68551,"name":"address","nodeType":"ElementaryTypeName","src":"8499:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8498:9:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68620,"nodeType":"FunctionDefinition","src":"8663:390:120","nodes":[],"body":{"id":68619,"nodeType":"Block","src":"8798:255:120","nodes":[],"statements":[{"assignments":[68588],"declarations":[{"constant":false,"id":68588,"mutability":"mutable","name":"mirror","nameLocation":"8816:6:120","nodeType":"VariableDeclaration","scope":68619,"src":"8808:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68587,"name":"address","nodeType":"ElementaryTypeName","src":"8808:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":68593,"initialValue":{"arguments":[{"id":68590,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68580,"src":"8840:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68591,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68582,"src":"8849:5:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":68589,"name":"_createProgram","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69031,"src":"8825:14:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,bytes32) returns (address)"}},"id":68592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8825:30:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8808:47:120"},{"assignments":[68595],"declarations":[{"constant":false,"id":68595,"mutability":"mutable","name":"decoder","nameLocation":"8873:7:120","nodeType":"VariableDeclaration","scope":68619,"src":"8865:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68594,"name":"address","nodeType":"ElementaryTypeName","src":"8865:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":68607,"initialValue":{"arguments":[{"id":68597,"name":"_decoderImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68578,"src":"8898:12:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":68601,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68580,"src":"8939:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68602,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68582,"src":"8948:5:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":68599,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8922:3:120","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":68600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8926:12:120","memberName":"encodePacked","nodeType":"MemberAccess","src":"8922:16:120","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":68603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8922:32:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":68598,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8912:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":68604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8912:43:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68605,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68588,"src":"8957:6:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":68596,"name":"_createDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69060,"src":"8883:14:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (address,bytes32,address) returns (address)"}},"id":68606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8883:81:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8865:99:120"},{"expression":{"arguments":[{"expression":{"id":68612,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9002:3:120","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":68613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9006:6:120","memberName":"sender","nodeType":"MemberAccess","src":"9002:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":68614,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68595,"src":"9014:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":68609,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68588,"src":"8983:6:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":68608,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65178,"src":"8975:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$65178_$","typeString":"type(contract IMirror)"}},"id":68610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8975:15:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$65178","typeString":"contract IMirror"}},"id":68611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8991:10:120","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":65169,"src":"8975:26:120","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":68615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8975:47:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68616,"nodeType":"ExpressionStatement","src":"8975:47:120"},{"expression":{"id":68617,"name":"mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68588,"src":"9040:6:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":68586,"id":68618,"nodeType":"Return","src":"9033:13:120"}]},"baseFunctions":[65453],"functionSelector":"e7006a74","implemented":true,"kind":"function","modifiers":[],"name":"createProgramWithDecoder","nameLocation":"8672:24:120","parameters":{"id":68583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68578,"mutability":"mutable","name":"_decoderImpl","nameLocation":"8705:12:120","nodeType":"VariableDeclaration","scope":68620,"src":"8697:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68577,"name":"address","nodeType":"ElementaryTypeName","src":"8697:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":68580,"mutability":"mutable","name":"_codeId","nameLocation":"8727:7:120","nodeType":"VariableDeclaration","scope":68620,"src":"8719:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68579,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8719:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":68582,"mutability":"mutable","name":"_salt","nameLocation":"8744:5:120","nodeType":"VariableDeclaration","scope":68620,"src":"8736:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68581,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8736:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8696:54:120"},"returnParameters":{"id":68586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68585,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":68620,"src":"8785:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68584,"name":"address","nodeType":"ElementaryTypeName","src":"8785:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8784:9:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68738,"nodeType":"FunctionDefinition","src":"9133:1250:120","nodes":[],"body":{"id":68737,"nodeType":"Block","src":"9244:1139:120","nodes":[],"statements":[{"assignments":[68632],"declarations":[{"constant":false,"id":68632,"mutability":"mutable","name":"router","nameLocation":"9270:6:120","nodeType":"VariableDeclaration","scope":68737,"src":"9254:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68631,"nodeType":"UserDefinedTypeName","pathNode":{"id":68630,"name":"Storage","nameLocations":["9254:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"9254:7:120"},"referencedDeclaration":65258,"src":"9254:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68635,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68633,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"9279:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9279:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9254:34:120"},{"assignments":[68637],"declarations":[{"constant":false,"id":68637,"mutability":"mutable","name":"currentEraIndex","nameLocation":"9307:15:120","nodeType":"VariableDeclaration","scope":68737,"src":"9299:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68636,"name":"uint256","nodeType":"ElementaryTypeName","src":"9299:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":68649,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":68638,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9326:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":68639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9332:9:120","memberName":"timestamp","nodeType":"MemberAccess","src":"9326:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"expression":{"id":68640,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68632,"src":"9344:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68641,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9351:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"9344:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9364:9:120","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":69556,"src":"9344:29:120","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"9326:47:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":68644,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9325:49:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"expression":{"id":68645,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68632,"src":"9377:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9384:9:120","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":65253,"src":"9377:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"id":68647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9394:3:120","memberName":"era","nodeType":"MemberAccess","referencedDeclaration":69607,"src":"9377:20:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9325:72:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9299:98:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":68651,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68624,"src":"9416:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$69518_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":68652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9427:8:120","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":69517,"src":"9416:19:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68653,"name":"currentEraIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68637,"src":"9439:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":68654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9457:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9439:19:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9416:42:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6d6d69746d656e742065726120696e646578206973206e6f74206e6578742065726120696e646578","id":68657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9460:44:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_162890466e3da7889495cad8b992d317e467631b8d4abd8dc4464c15dd41b759","typeString":"literal_string \"commitment era index is not next era index\""},"value":"commitment era index is not next era index"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_162890466e3da7889495cad8b992d317e467631b8d4abd8dc4464c15dd41b759","typeString":"literal_string \"commitment era index is not next era index\""}],"id":68650,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9408:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9408:97:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68659,"nodeType":"ExpressionStatement","src":"9408:97:120"},{"assignments":[68661],"declarations":[{"constant":false,"id":68661,"mutability":"mutable","name":"nextEraStart","nameLocation":"9524:12:120","nodeType":"VariableDeclaration","scope":68737,"src":"9516:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68660,"name":"uint256","nodeType":"ElementaryTypeName","src":"9516:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":68672,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":68662,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68632,"src":"9539:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9546:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"9539:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9559:9:120","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":69556,"src":"9539:29:120","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":68665,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68632,"src":"9571:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9578:9:120","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":65253,"src":"9571:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"id":68667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9588:3:120","memberName":"era","nodeType":"MemberAccess","referencedDeclaration":69607,"src":"9571:20:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":68668,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68624,"src":"9594:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$69518_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":68669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9605:8:120","memberName":"eraIndex","nodeType":"MemberAccess","referencedDeclaration":69517,"src":"9594:19:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9571:42:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9539:74:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9516:97:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":68674,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9631:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":68675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9637:9:120","memberName":"timestamp","nodeType":"MemberAccess","src":"9631:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68676,"name":"nextEraStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68661,"src":"9650:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"expression":{"id":68677,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68632,"src":"9665:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9672:9:120","memberName":"timelines","nodeType":"MemberAccess","referencedDeclaration":65253,"src":"9665:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_Timelines_$69610_storage","typeString":"struct Gear.Timelines storage ref"}},"id":68679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9682:8:120","memberName":"election","nodeType":"MemberAccess","referencedDeclaration":69609,"src":"9665:25:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9650:40:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9631:59:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656c656374696f6e206973206e6f74207965742073746172746564","id":68682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9692:29:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef3e2748c631aa0d71d8afc854c277a3e771005dd496ece9dad00c587d5c5eaa","typeString":"literal_string \"election is not yet started\""},"value":"election is not yet started"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef3e2748c631aa0d71d8afc854c277a3e771005dd496ece9dad00c587d5c5eaa","typeString":"literal_string \"election is not yet started\""}],"id":68673,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9623:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9623:99:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68684,"nodeType":"ExpressionStatement","src":"9623:99:120"},{"assignments":[68689],"declarations":[{"constant":false,"id":68689,"mutability":"mutable","name":"_validators","nameLocation":"9804:11:120","nodeType":"VariableDeclaration","scope":68737,"src":"9780:35:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":68688,"nodeType":"UserDefinedTypeName","pathNode":{"id":68687,"name":"Gear.Validators","nameLocations":["9780:4:120","9785:10:120"],"nodeType":"IdentifierPath","referencedDeclaration":69505,"src":"9780:15:120"},"referencedDeclaration":69505,"src":"9780:15:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"}],"id":68694,"initialValue":{"arguments":[{"id":68692,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68632,"src":"9845:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}],"expression":{"id":68690,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"9818:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9823:21:120","memberName":"previousEraValidators","nodeType":"MemberAccess","referencedDeclaration":69970,"src":"9818:26:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$returns$_t_struct$_Validators_$69505_storage_ptr_$","typeString":"function (struct IRouter.Storage storage pointer) view returns (struct Gear.Validators storage pointer)"}},"id":68693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9818:34:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9780:72:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":68696,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68689,"src":"9870:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":68697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9882:16:120","memberName":"useFromTimestamp","nodeType":"MemberAccess","referencedDeclaration":69504,"src":"9870:28:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":68698,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9901:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":68699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9907:9:120","memberName":"timestamp","nodeType":"MemberAccess","src":"9901:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9870:46:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6c6f6f6b73206c696b652076616c696461746f727320666f72206e657874206572612061726520616c726561647920736574","id":68701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9918:52:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_b284ea0c51a926e5b8ea00c07f1ff766c11519c493036a65a767443fdf3f1780","typeString":"literal_string \"looks like validators for next era are already set\""},"value":"looks like validators for next era are already set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b284ea0c51a926e5b8ea00c07f1ff766c11519c493036a65a767443fdf3f1780","typeString":"literal_string \"looks like validators for next era are already set\""}],"id":68695,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"9862:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9862:109:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68703,"nodeType":"ExpressionStatement","src":"9862:109:120"},{"assignments":[68705],"declarations":[{"constant":false,"id":68705,"mutability":"mutable","name":"commitmentHash","nameLocation":"9990:14:120","nodeType":"VariableDeclaration","scope":68737,"src":"9982:22:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68704,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9982:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":68710,"initialValue":{"arguments":[{"id":68708,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68624,"src":"10037:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$69518_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidatorsCommitment_$69518_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}],"expression":{"id":68706,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"10007:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10012:24:120","memberName":"validatorsCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":69645,"src":"10007:29:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ValidatorsCommitment_$69518_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.ValidatorsCommitment memory) pure returns (bytes32)"}},"id":68709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10007:41:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9982:66:120"},{"expression":{"arguments":[{"arguments":[{"id":68714,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68632,"src":"10103:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"arguments":[{"arguments":[{"id":68718,"name":"commitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68705,"src":"10138:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":68716,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10121:3:120","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":68717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10125:12:120","memberName":"encodePacked","nodeType":"MemberAccess","src":"10121:16:120","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":68719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10121:32:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":68715,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10111:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":68720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10111:43:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68721,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68627,"src":"10156:10:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"expression":{"id":68712,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"10079:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10084:18:120","memberName":"validateSignatures","nodeType":"MemberAccess","referencedDeclaration":69922,"src":"10079:23:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes calldata[] calldata) view returns (bool)"}},"id":68722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10079:88:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e657874206572612076616c696461746f7273207369676e61747572657320766572696669636174696f6e206661696c6564","id":68723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10181:52:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_349cc9c1a1e1cddede1f7780f29c462d7f3b361b9dfecea0303aaa7d870183b1","typeString":"literal_string \"next era validators signatures verification failed\""},"value":"next era validators signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_349cc9c1a1e1cddede1f7780f29c462d7f3b361b9dfecea0303aaa7d870183b1","typeString":"literal_string \"next era validators signatures verification failed\""}],"id":68711,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10058:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10058:185:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68725,"nodeType":"ExpressionStatement","src":"10058:185:120"},{"expression":{"arguments":[{"id":68727,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68689,"src":"10271:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},{"expression":{"id":68728,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68624,"src":"10284:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$69518_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment calldata"}},"id":68729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10295:10:120","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":69515,"src":"10284:21:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":68730,"name":"nextEraStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68661,"src":"10307:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":68726,"name":"_resetValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69294,"src":"10254:16:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Validators_$69505_storage_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct Gear.Validators storage pointer,address[] memory,uint256)"}},"id":68731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10254:66:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68732,"nodeType":"ExpressionStatement","src":"10254:66:120"},{"eventCall":{"arguments":[{"id":68734,"name":"nextEraStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68661,"src":"10363:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":68733,"name":"NextEraValidatorsCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65282,"src":"10336:26:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":68735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10336:40:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68736,"nodeType":"EmitStatement","src":"10331:45:120"}]},"baseFunctions":[65485],"documentation":{"id":68621,"nodeType":"StructuredDocumentation","src":"9087:41:120","text":"@dev Set validators for the next era."},"functionSelector":"aaf0fe6a","implemented":true,"kind":"function","modifiers":[],"name":"commitValidators","nameLocation":"9142:16:120","parameters":{"id":68628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68624,"mutability":"mutable","name":"commitment","nameLocation":"9194:10:120","nodeType":"VariableDeclaration","scope":68738,"src":"9159:45:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$69518_calldata_ptr","typeString":"struct Gear.ValidatorsCommitment"},"typeName":{"id":68623,"nodeType":"UserDefinedTypeName","pathNode":{"id":68622,"name":"Gear.ValidatorsCommitment","nameLocations":["9159:4:120","9164:20:120"],"nodeType":"IdentifierPath","referencedDeclaration":69518,"src":"9159:25:120"},"referencedDeclaration":69518,"src":"9159:25:120","typeDescriptions":{"typeIdentifier":"t_struct$_ValidatorsCommitment_$69518_storage_ptr","typeString":"struct Gear.ValidatorsCommitment"}},"visibility":"internal"},{"constant":false,"id":68627,"mutability":"mutable","name":"signatures","nameLocation":"9223:10:120","nodeType":"VariableDeclaration","scope":68738,"src":"9206:27:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":68625,"name":"bytes","nodeType":"ElementaryTypeName","src":"9206:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":68626,"nodeType":"ArrayTypeName","src":"9206:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9158:76:120"},"returnParameters":{"id":68629,"nodeType":"ParameterList","parameters":[],"src":"9244:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68870,"nodeType":"FunctionDefinition","src":"10389:1336:120","nodes":[],"body":{"id":68869,"nodeType":"Block","src":"10498:1227:120","nodes":[],"statements":[{"assignments":[68750],"declarations":[{"constant":false,"id":68750,"mutability":"mutable","name":"router","nameLocation":"10524:6:120","nodeType":"VariableDeclaration","scope":68869,"src":"10508:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68749,"nodeType":"UserDefinedTypeName","pathNode":{"id":68748,"name":"Storage","nameLocations":["10508:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"10508:7:120"},"referencedDeclaration":65258,"src":"10508:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68753,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68751,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"10533:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10533:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10508:34:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":68755,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68750,"src":"10560:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68756,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10567:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"10560:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10580:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69552,"src":"10560:24:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":68760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10596:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10588:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":68758,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10588:7:120","typeDescriptions":{}}},"id":68761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10588:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10560:38:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":68763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10600:58:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":68754,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10552:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10552:107:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68765,"nodeType":"ExpressionStatement","src":"10552:107:120"},{"assignments":[68767],"declarations":[{"constant":false,"id":68767,"mutability":"mutable","name":"codeCommitmentsHashes","nameLocation":"10683:21:120","nodeType":"VariableDeclaration","scope":68869,"src":"10670:34:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":68766,"name":"bytes","nodeType":"ElementaryTypeName","src":"10670:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":68768,"nodeType":"VariableDeclarationStatement","src":"10670:34:120"},{"body":{"id":68855,"nodeType":"Block","src":"10769:784:120","statements":[{"assignments":[68784],"declarations":[{"constant":false,"id":68784,"mutability":"mutable","name":"codeCommitment","nameLocation":"10812:14:120","nodeType":"VariableDeclaration","scope":68855,"src":"10783:43:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment"},"typeName":{"id":68783,"nodeType":"UserDefinedTypeName","pathNode":{"id":68782,"name":"Gear.CodeCommitment","nameLocations":["10783:4:120","10788:14:120"],"nodeType":"IdentifierPath","referencedDeclaration":69536,"src":"10783:19:120"},"referencedDeclaration":69536,"src":"10783:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"visibility":"internal"}],"id":68788,"initialValue":{"baseExpression":{"id":68785,"name":"_codeCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68742,"src":"10829:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$69536_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":68787,"indexExpression":{"id":68786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68770,"src":"10846:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10829:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"10783:65:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"},"id":68799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":68790,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68750,"src":"10888:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10895:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"10888:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10908:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"10888:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68795,"indexExpression":{"expression":{"id":68793,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68784,"src":"10914:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":68794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10929:2:120","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":69533,"src":"10914:17:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10888:44:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":68796,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"10936:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10941:9:120","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":69540,"src":"10936:14:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$69540_$","typeString":"type(enum Gear.CodeState)"}},"id":68798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10951:19:120","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":69538,"src":"10936:34:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"src":"10888:82:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652072657175657374656420666f722076616c69646174696f6e20746f20626520636f6d6d6974746564","id":68800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10988:55:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""},"value":"code must be requested for validation to be committed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5641fde195ef857639d9de420cb3fc56957be6957a3c8a5e78a2243186a510e8","typeString":"literal_string \"code must be requested for validation to be committed\""}],"id":68789,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10863:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10863:194:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68802,"nodeType":"ExpressionStatement","src":"10863:194:120"},{"condition":{"expression":{"id":68803,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68784,"src":"11076:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":68804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11091:5:120","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":69535,"src":"11076:20:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":68834,"nodeType":"Block","src":"11267:84:120","statements":[{"expression":{"id":68832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"11285:51:120","subExpression":{"baseExpression":{"expression":{"expression":{"id":68826,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68750,"src":"11292:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11299:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"11292:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11312:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"11292:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68831,"indexExpression":{"expression":{"id":68829,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68784,"src":"11318:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":68830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11333:2:120","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":69533,"src":"11318:17:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11292:44:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68833,"nodeType":"ExpressionStatement","src":"11285:51:120"}]},"id":68835,"nodeType":"IfStatement","src":"11072:279:120","trueBody":{"id":68825,"nodeType":"Block","src":"11098:163:120","statements":[{"expression":{"id":68816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":68805,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68750,"src":"11116:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68810,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11123:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"11116:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11136:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"11116:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68812,"indexExpression":{"expression":{"id":68808,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68784,"src":"11142:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":68809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11157:2:120","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":69533,"src":"11142:17:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11116:44:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":68813,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"11163:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11168:9:120","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":69540,"src":"11163:14:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$69540_$","typeString":"type(enum Gear.CodeState)"}},"id":68815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11178:9:120","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":69539,"src":"11163:24:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"src":"11116:71:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"id":68817,"nodeType":"ExpressionStatement","src":"11116:71:120"},{"expression":{"id":68823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11205:41:120","subExpression":{"expression":{"expression":{"id":68818,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68750,"src":"11205:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11212:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"11205:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11225:19:120","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":69582,"src":"11205:39:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":68824,"nodeType":"ExpressionStatement","src":"11205:41:120"}]}},{"eventCall":{"arguments":[{"expression":{"id":68837,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68784,"src":"11387:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":68838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11402:2:120","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":69533,"src":"11387:17:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":68839,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68784,"src":"11406:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}},"id":68840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11421:5:120","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":69535,"src":"11406:20:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":68836,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65270,"src":"11370:16:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":68841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11370:57:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68842,"nodeType":"EmitStatement","src":"11365:62:120"},{"expression":{"id":68853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":68843,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68767,"src":"11442:21:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":68847,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68767,"src":"11479:21:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":68850,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68784,"src":"11526:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$69536_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata"}],"expression":{"id":68848,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"11502:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11507:18:120","memberName":"codeCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":69735,"src":"11502:23:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$69536_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.CodeCommitment calldata) pure returns (bytes32)"}},"id":68851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11502:39:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":68845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11466:5:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":68844,"name":"bytes","nodeType":"ElementaryTypeName","src":"11466:5:120","typeDescriptions":{}}},"id":68846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11472:6:120","memberName":"concat","nodeType":"MemberAccess","src":"11466:12:120","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":68852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11466:76:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"11442:100:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":68854,"nodeType":"ExpressionStatement","src":"11442:100:120"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68773,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68770,"src":"10735:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":68774,"name":"_codeCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68742,"src":"10739:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$69536_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment calldata[] calldata"}},"id":68775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10756:6:120","memberName":"length","nodeType":"MemberAccess","src":"10739:23:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10735:27:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":68856,"initializationExpression":{"assignments":[68770],"declarations":[{"constant":false,"id":68770,"mutability":"mutable","name":"i","nameLocation":"10728:1:120","nodeType":"VariableDeclaration","scope":68856,"src":"10720:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68769,"name":"uint256","nodeType":"ElementaryTypeName","src":"10720:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":68772,"initialValue":{"hexValue":"30","id":68771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10732:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10720:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":68778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10764:3:120","subExpression":{"id":68777,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68770,"src":"10764:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":68779,"nodeType":"ExpressionStatement","src":"10764:3:120"},"nodeType":"ForStatement","src":"10715:838:120"},{"expression":{"arguments":[{"arguments":[{"id":68860,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68750,"src":"11608:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"arguments":[{"id":68862,"name":"codeCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68767,"src":"11626:21:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":68861,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"11616:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":68863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11616:32:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68864,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68745,"src":"11650:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"expression":{"id":68858,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"11584:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11589:18:120","memberName":"validateSignatures","nodeType":"MemberAccess","referencedDeclaration":69922,"src":"11584:23:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes calldata[] calldata) view returns (bool)"}},"id":68865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11584:78:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":68866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11676:32:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":68857,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11563:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11563:155:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68868,"nodeType":"ExpressionStatement","src":"11563:155:120"}]},"baseFunctions":[65464],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"10398:11:120","parameters":{"id":68746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68742,"mutability":"mutable","name":"_codeCommitments","nameLocation":"10441:16:120","nodeType":"VariableDeclaration","scope":68870,"src":"10410:47:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$69536_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.CodeCommitment[]"},"typeName":{"baseType":{"id":68740,"nodeType":"UserDefinedTypeName","pathNode":{"id":68739,"name":"Gear.CodeCommitment","nameLocations":["10410:4:120","10415:14:120"],"nodeType":"IdentifierPath","referencedDeclaration":69536,"src":"10410:19:120"},"referencedDeclaration":69536,"src":"10410:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$69536_storage_ptr","typeString":"struct Gear.CodeCommitment"}},"id":68741,"nodeType":"ArrayTypeName","src":"10410:21:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$69536_storage_$dyn_storage_ptr","typeString":"struct Gear.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":68745,"mutability":"mutable","name":"_signatures","nameLocation":"10476:11:120","nodeType":"VariableDeclaration","scope":68870,"src":"10459:28:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":68743,"name":"bytes","nodeType":"ElementaryTypeName","src":"10459:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":68744,"nodeType":"ArrayTypeName","src":"10459:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"10409:79:120"},"returnParameters":{"id":68747,"nodeType":"ParameterList","parameters":[],"src":"10498:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":68950,"nodeType":"FunctionDefinition","src":"11731:798:120","nodes":[],"body":{"id":68949,"nodeType":"Block","src":"11876:653:120","nodes":[],"statements":[{"assignments":[68884],"declarations":[{"constant":false,"id":68884,"mutability":"mutable","name":"router","nameLocation":"11902:6:120","nodeType":"VariableDeclaration","scope":68949,"src":"11886:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68883,"nodeType":"UserDefinedTypeName","pathNode":{"id":68882,"name":"Storage","nameLocations":["11886:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"11886:7:120"},"referencedDeclaration":65258,"src":"11886:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68887,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68885,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"11911:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11911:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11886:34:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":68889,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68884,"src":"11938:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68890,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11945:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"11938:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68891,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11958:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69552,"src":"11938:24:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":68894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11974:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11966:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":68892,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11966:7:120","typeDescriptions":{}}},"id":68895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11966:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11938:38:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":68897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11978:58:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":68888,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11930:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11930:107:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68899,"nodeType":"ExpressionStatement","src":"11930:107:120"},{"assignments":[68901],"declarations":[{"constant":false,"id":68901,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"12061:22:120","nodeType":"VariableDeclaration","scope":68949,"src":"12048:35:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":68900,"name":"bytes","nodeType":"ElementaryTypeName","src":"12048:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":68902,"nodeType":"VariableDeclarationStatement","src":"12048:35:120"},{"body":{"id":68935,"nodeType":"Block","src":"12149:207:120","statements":[{"assignments":[68918],"declarations":[{"constant":false,"id":68918,"mutability":"mutable","name":"blockCommitment","nameLocation":"12193:15:120","nodeType":"VariableDeclaration","scope":68935,"src":"12163:45:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment"},"typeName":{"id":68917,"nodeType":"UserDefinedTypeName","pathNode":{"id":68916,"name":"Gear.BlockCommitment","nameLocations":["12163:4:120","12168:15:120"],"nodeType":"IdentifierPath","referencedDeclaration":69531,"src":"12163:20:120"},"referencedDeclaration":69531,"src":"12163:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"visibility":"internal"}],"id":68922,"initialValue":{"baseExpression":{"id":68919,"name":"_blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68874,"src":"12211:17:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$69531_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata[] calldata"}},"id":68921,"indexExpression":{"id":68920,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68904,"src":"12229:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12211:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"12163:68:120"},{"expression":{"id":68933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":68923,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68901,"src":"12245:22:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":68927,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68901,"src":"12283:22:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":68929,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68884,"src":"12320:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"id":68930,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68918,"src":"12328:15:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}],"id":68928,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69129,"src":"12307:12:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$65258_storage_ptr_$_t_struct$_BlockCommitment_$69531_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.BlockCommitment calldata) returns (bytes32)"}},"id":68931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12307:37:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":68925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12270:5:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":68924,"name":"bytes","nodeType":"ElementaryTypeName","src":"12270:5:120","typeDescriptions":{}}},"id":68926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12276:6:120","memberName":"concat","nodeType":"MemberAccess","src":"12270:12:120","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":68932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12270:75:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"12245:100:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":68934,"nodeType":"ExpressionStatement","src":"12245:100:120"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68907,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68904,"src":"12114:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":68908,"name":"_blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68874,"src":"12118:17:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$69531_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata[] calldata"}},"id":68909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12136:6:120","memberName":"length","nodeType":"MemberAccess","src":"12118:24:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12114:28:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":68936,"initializationExpression":{"assignments":[68904],"declarations":[{"constant":false,"id":68904,"mutability":"mutable","name":"i","nameLocation":"12107:1:120","nodeType":"VariableDeclaration","scope":68936,"src":"12099:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":68903,"name":"uint256","nodeType":"ElementaryTypeName","src":"12099:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":68906,"initialValue":{"hexValue":"30","id":68905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12111:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12099:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":68912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12144:3:120","subExpression":{"id":68911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68904,"src":"12144:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":68913,"nodeType":"ExpressionStatement","src":"12144:3:120"},"nodeType":"ForStatement","src":"12094:262:120"},{"expression":{"arguments":[{"arguments":[{"id":68940,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68884,"src":"12411:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"arguments":[{"id":68942,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68901,"src":"12429:22:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":68941,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12419:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":68943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12419:33:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":68944,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68877,"src":"12454:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"expression":{"id":68938,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"12387:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12392:18:120","memberName":"validateSignatures","nodeType":"MemberAccess","referencedDeclaration":69922,"src":"12387:23:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Storage_$65258_storage_ptr_$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bool_$","typeString":"function (struct IRouter.Storage storage pointer,bytes32,bytes calldata[] calldata) view returns (bool)"}},"id":68945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12387:79:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7369676e61747572657320766572696669636174696f6e206661696c6564","id":68946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12480:32:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""},"value":"signatures verification failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42f70f68087ddd2ea90e0adc36eeb88121bbdb06c88480a0c6a87e4a00dde3b2","typeString":"literal_string \"signatures verification failed\""}],"id":68937,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12366:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12366:156:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68948,"nodeType":"ExpressionStatement","src":"12366:156:120"}]},"baseFunctions":[65475],"functionSelector":"01b1d156","implemented":true,"kind":"function","modifiers":[{"id":68880,"kind":"modifierInvocation","modifierName":{"id":68879,"name":"nonReentrant","nameLocations":["11859:12:120"],"nodeType":"IdentifierPath","referencedDeclaration":44262,"src":"11859:12:120"},"nodeType":"ModifierInvocation","src":"11859:12:120"}],"name":"commitBlocks","nameLocation":"11740:12:120","parameters":{"id":68878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68874,"mutability":"mutable","name":"_blockCommitments","nameLocation":"11785:17:120","nodeType":"VariableDeclaration","scope":68950,"src":"11753:49:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$69531_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.BlockCommitment[]"},"typeName":{"baseType":{"id":68872,"nodeType":"UserDefinedTypeName","pathNode":{"id":68871,"name":"Gear.BlockCommitment","nameLocations":["11753:4:120","11758:15:120"],"nodeType":"IdentifierPath","referencedDeclaration":69531,"src":"11753:20:120"},"referencedDeclaration":69531,"src":"11753:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"id":68873,"nodeType":"ArrayTypeName","src":"11753:22:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$69531_storage_$dyn_storage_ptr","typeString":"struct Gear.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":68877,"mutability":"mutable","name":"_signatures","nameLocation":"11821:11:120","nodeType":"VariableDeclaration","scope":68950,"src":"11804:28:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":68875,"name":"bytes","nodeType":"ElementaryTypeName","src":"11804:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":68876,"nodeType":"ArrayTypeName","src":"11804:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"11752:81:120"},"returnParameters":{"id":68881,"nodeType":"ParameterList","parameters":[],"src":"11876:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":69031,"nodeType":"FunctionDefinition","src":"12571:887:120","nodes":[],"body":{"id":69030,"nodeType":"Block","src":"12653:805:120","nodes":[],"statements":[{"assignments":[68961],"declarations":[{"constant":false,"id":68961,"mutability":"mutable","name":"router","nameLocation":"12679:6:120","nodeType":"VariableDeclaration","scope":69030,"src":"12663:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":68960,"nodeType":"UserDefinedTypeName","pathNode":{"id":68959,"name":"Storage","nameLocations":["12663:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"12663:7:120"},"referencedDeclaration":65258,"src":"12663:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":68964,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":68962,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69307,"src":"12688:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$65258_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":68963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12688:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12663:34:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":68973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":68966,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68961,"src":"12715:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12722:12:120","memberName":"genesisBlock","nodeType":"MemberAccess","referencedDeclaration":65233,"src":"12715:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_GenesisBlockInfo_$69557_storage","typeString":"struct Gear.GenesisBlockInfo storage ref"}},"id":68968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12735:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69552,"src":"12715:24:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":68971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12751:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":68970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12743:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":68969,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12743:7:120","typeDescriptions":{}}},"id":68972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12743:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12715:38:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f757465722067656e65736973206973207a65726f3b2063616c6c20606c6f6f6b757047656e6573697348617368282960206669727374","id":68974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12755:58:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""},"value":"router genesis is zero; call `lookupGenesisHash()` first"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fec8ede65c0caef3899b3174f258c732d5616cc4144b82fcdbac009109d42dc","typeString":"literal_string \"router genesis is zero; call `lookupGenesisHash()` first\""}],"id":68965,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12707:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12707:107:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68976,"nodeType":"ExpressionStatement","src":"12707:107:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"},"id":68986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":68978,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68961,"src":"12846:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68979,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12853:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"12846:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":68980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12866:5:120","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":69574,"src":"12846:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$69540_$","typeString":"mapping(bytes32 => enum Gear.CodeState)"}},"id":68982,"indexExpression":{"id":68981,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68952,"src":"12872:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12846:34:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":68983,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"12884:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":68984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12889:9:120","memberName":"CodeState","nodeType":"MemberAccess","referencedDeclaration":69540,"src":"12884:14:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$69540_$","typeString":"type(enum Gear.CodeState)"}},"id":68985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12899:9:120","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":69539,"src":"12884:24:120","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$69540","typeString":"enum Gear.CodeState"}},"src":"12846:62:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":68987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12922:48:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":68977,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12825:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":68988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12825:155:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":68989,"nodeType":"ExpressionStatement","src":"12825:155:120"},{"assignments":[68991],"declarations":[{"constant":false,"id":68991,"mutability":"mutable","name":"actorId","nameLocation":"13149:7:120","nodeType":"VariableDeclaration","scope":69030,"src":"13141:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68990,"name":"address","nodeType":"ElementaryTypeName","src":"13141:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":69005,"initialValue":{"arguments":[{"expression":{"expression":{"id":68994,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68961,"src":"13197:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":68995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13204:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"13197:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":68996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13218:11:120","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":69509,"src":"13197:32:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":69000,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68952,"src":"13258:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":69001,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68954,"src":"13267:5:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":68998,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13241:3:120","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":68999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13245:12:120","memberName":"encodePacked","nodeType":"MemberAccess","src":"13241:16:120","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":69002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13241:32:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":68997,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"13231:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":69003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13231:43:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":68992,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42512,"src":"13171:6:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$42512_$","typeString":"type(library Clones)"}},"id":68993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13178:18:120","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":42430,"src":"13171:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":69004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13171:104:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13141:134:120"},{"expression":{"id":69014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"expression":{"id":69006,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68961,"src":"13286:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":69010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13293:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"13286:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":69011,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13306:8:120","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":69578,"src":"13286:28:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":69012,"indexExpression":{"id":69009,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68991,"src":"13315:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13286:37:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":69013,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68952,"src":"13326:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"13286:47:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":69015,"nodeType":"ExpressionStatement","src":"13286:47:120"},{"expression":{"id":69021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13343:35:120","subExpression":{"expression":{"expression":{"id":69016,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68961,"src":"13343:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":69019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13350:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"13343:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":69020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13363:13:120","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":69580,"src":"13343:33:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":69022,"nodeType":"ExpressionStatement","src":"13343:35:120"},{"eventCall":{"arguments":[{"id":69024,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68991,"src":"13409:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":69025,"name":"_codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68952,"src":"13418:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":69023,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65296,"src":"13394:14:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":69026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13394:32:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69027,"nodeType":"EmitStatement","src":"13389:37:120"},{"expression":{"id":69028,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":68991,"src":"13444:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":68958,"id":69029,"nodeType":"Return","src":"13437:14:120"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_createProgram","nameLocation":"12580:14:120","parameters":{"id":68955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68952,"mutability":"mutable","name":"_codeId","nameLocation":"12603:7:120","nodeType":"VariableDeclaration","scope":69031,"src":"12595:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68951,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12595:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":68954,"mutability":"mutable","name":"_salt","nameLocation":"12620:5:120","nodeType":"VariableDeclaration","scope":69031,"src":"12612:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":68953,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12612:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12594:32:120"},"returnParameters":{"id":68958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":68957,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":69031,"src":"12644:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68956,"name":"address","nodeType":"ElementaryTypeName","src":"12644:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12643:9:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":69060,"nodeType":"FunctionDefinition","src":"13464:270:120","nodes":[],"body":{"id":69059,"nodeType":"Block","src":"13571:163:120","nodes":[],"statements":[{"assignments":[69043],"declarations":[{"constant":false,"id":69043,"mutability":"mutable","name":"decoder","nameLocation":"13589:7:120","nodeType":"VariableDeclaration","scope":69059,"src":"13581:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69042,"name":"address","nodeType":"ElementaryTypeName","src":"13581:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":69049,"initialValue":{"arguments":[{"id":69046,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69033,"src":"13625:15:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":69047,"name":"_salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69035,"src":"13642:5:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":69044,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42512,"src":"13599:6:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$42512_$","typeString":"type(library Clones)"}},"id":69045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13606:18:120","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":42430,"src":"13599:25:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":69048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13599:49:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13581:67:120"},{"expression":{"arguments":[{"id":69054,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69037,"src":"13694:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":69051,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69043,"src":"13674:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":69050,"name":"IMirrorDecoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65215,"src":"13659:14:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorDecoder_$65215_$","typeString":"type(contract IMirrorDecoder)"}},"id":69052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13659:23:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorDecoder_$65215","typeString":"contract IMirrorDecoder"}},"id":69053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13683:10:120","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":65185,"src":"13659:34:120","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":69055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13659:43:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69056,"nodeType":"ExpressionStatement","src":"13659:43:120"},{"expression":{"id":69057,"name":"decoder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69043,"src":"13720:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":69041,"id":69058,"nodeType":"Return","src":"13713:14:120"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_createDecoder","nameLocation":"13473:14:120","parameters":{"id":69038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69033,"mutability":"mutable","name":"_implementation","nameLocation":"13496:15:120","nodeType":"VariableDeclaration","scope":69060,"src":"13488:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69032,"name":"address","nodeType":"ElementaryTypeName","src":"13488:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":69035,"mutability":"mutable","name":"_salt","nameLocation":"13521:5:120","nodeType":"VariableDeclaration","scope":69060,"src":"13513:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69034,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13513:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":69037,"mutability":"mutable","name":"_mirror","nameLocation":"13536:7:120","nodeType":"VariableDeclaration","scope":69060,"src":"13528:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69036,"name":"address","nodeType":"ElementaryTypeName","src":"13528:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13487:57:120"},"returnParameters":{"id":69041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":69060,"src":"13562:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69039,"name":"address","nodeType":"ElementaryTypeName","src":"13562:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13561:9:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":69129,"nodeType":"FunctionDefinition","src":"13740:1094:120","nodes":[],"body":{"id":69128,"nodeType":"Block","src":"13880:954:120","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":69077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":69072,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69063,"src":"13911:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":69073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13918:20:120","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":65237,"src":"13911:27:120","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$69545_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":69074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13939:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69542,"src":"13911:32:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":69075,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"13947:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13964:22:120","memberName":"previousCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":69524,"src":"13947:39:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"13911:75:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d697474656420626c6f636b2068617368","id":69078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14000:39:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_4a13fb2485de3ac50aa69e9cf88b3994102e3ec72af73005448c8624cb4f1ed7","typeString":"literal_string \"invalid previous committed block hash\""},"value":"invalid previous committed block hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4a13fb2485de3ac50aa69e9cf88b3994102e3ec72af73005448c8624cb4f1ed7","typeString":"literal_string \"invalid previous committed block hash\""}],"id":69071,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13890:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":69079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13890:159:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69080,"nodeType":"ExpressionStatement","src":"13890:159:120"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":69084,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14092:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14109:16:120","memberName":"predecessorBlock","nodeType":"MemberAccess","referencedDeclaration":69526,"src":"14092:33:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":69082,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"14068:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":69083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14073:18:120","memberName":"blockIsPredecessor","nodeType":"MemberAccess","referencedDeclaration":69716,"src":"14068:23:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":69086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14068:58:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b207761736e277420666f756e64","id":69087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14128:40:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""},"value":"allowed predecessor block wasn't found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b3ebb0be53d5bf46a2d46be11aa5ba444a61071a9171c96feb964b4bc5f6539a","typeString":"literal_string \"allowed predecessor block wasn't found\""}],"id":69081,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14060:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":69088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14060:109:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69089,"nodeType":"ExpressionStatement","src":"14060:109:120"},{"expression":{"id":69100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":69090,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69063,"src":"14309:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":69092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14316:20:120","memberName":"latestCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":65237,"src":"14309:27:120","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$69545_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":69095,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14363:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14380:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69520,"src":"14363:21:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":69097,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14386:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14403:9:120","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":69522,"src":"14386:26:120","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":69093,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"14339:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":69094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14344:18:120","memberName":"CommittedBlockInfo","nodeType":"MemberAccess","referencedDeclaration":69545,"src":"14339:23:120","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CommittedBlockInfo_$69545_storage_ptr_$","typeString":"type(struct Gear.CommittedBlockInfo storage pointer)"}},"id":69099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14339:74:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$69545_memory_ptr","typeString":"struct Gear.CommittedBlockInfo memory"}},"src":"14309:104:120","typeDescriptions":{"typeIdentifier":"t_struct$_CommittedBlockInfo_$69545_storage","typeString":"struct Gear.CommittedBlockInfo storage ref"}},"id":69101,"nodeType":"ExpressionStatement","src":"14309:104:120"},{"assignments":[69103],"declarations":[{"constant":false,"id":69103,"mutability":"mutable","name":"transitionsHashesHash","nameLocation":"14432:21:120","nodeType":"VariableDeclaration","scope":69128,"src":"14424:29:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69102,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14424:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":69109,"initialValue":{"arguments":[{"id":69105,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69063,"src":"14475:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},{"expression":{"id":69106,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14483:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14500:11:120","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":69530,"src":"14483:28:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$69605_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"},{"typeIdentifier":"t_array$_t_struct$_StateTransition_$69605_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}],"id":69104,"name":"_commitTransitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69214,"src":"14456:18:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Storage_$65258_storage_ptr_$_t_array$_t_struct$_StateTransition_$69605_calldata_ptr_$dyn_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.Storage storage pointer,struct Gear.StateTransition calldata[] calldata) returns (bytes32)"}},"id":69108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14456:56:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"14424:88:120"},{"eventCall":{"arguments":[{"expression":{"id":69111,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14543:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14560:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69520,"src":"14543:21:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":69110,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65263,"src":"14528:14:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":69113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14528:37:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69114,"nodeType":"EmitStatement","src":"14523:42:120"},{"expression":{"arguments":[{"expression":{"id":69117,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14621:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14638:4:120","memberName":"hash","nodeType":"MemberAccess","referencedDeclaration":69520,"src":"14621:21:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":69119,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14656:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14673:9:120","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":69522,"src":"14656:26:120","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"expression":{"id":69121,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14696:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14713:22:120","memberName":"previousCommittedBlock","nodeType":"MemberAccess","referencedDeclaration":69524,"src":"14696:39:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":69123,"name":"_blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69066,"src":"14749:16:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment calldata"}},"id":69124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14766:16:120","memberName":"predecessorBlock","nodeType":"MemberAccess","referencedDeclaration":69526,"src":"14749:33:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":69125,"name":"transitionsHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69103,"src":"14796:21:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":69115,"name":"Gear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":70080,"src":"14583:4:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Gear_$70080_$","typeString":"type(library Gear)"}},"id":69116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14588:19:120","memberName":"blockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":69672,"src":"14583:24:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint48_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint48,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":69126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14583:244:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":69070,"id":69127,"nodeType":"Return","src":"14576:251:120"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"13749:12:120","parameters":{"id":69067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69063,"mutability":"mutable","name":"router","nameLocation":"13778:6:120","nodeType":"VariableDeclaration","scope":69129,"src":"13762:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":69062,"nodeType":"UserDefinedTypeName","pathNode":{"id":69061,"name":"Storage","nameLocations":["13762:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"13762:7:120"},"referencedDeclaration":65258,"src":"13762:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":69066,"mutability":"mutable","name":"_blockCommitment","nameLocation":"13816:16:120","nodeType":"VariableDeclaration","scope":69129,"src":"13786:46:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_calldata_ptr","typeString":"struct Gear.BlockCommitment"},"typeName":{"id":69065,"nodeType":"UserDefinedTypeName","pathNode":{"id":69064,"name":"Gear.BlockCommitment","nameLocations":["13786:4:120","13791:15:120"],"nodeType":"IdentifierPath","referencedDeclaration":69531,"src":"13786:20:120"},"referencedDeclaration":69531,"src":"13786:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$69531_storage_ptr","typeString":"struct Gear.BlockCommitment"}},"visibility":"internal"}],"src":"13761:72:120"},"returnParameters":{"id":69070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":69129,"src":"13867:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69068,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13867:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"13866:9:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":69214,"nodeType":"FunctionDefinition","src":"14840:839:120","nodes":[],"body":{"id":69213,"nodeType":"Block","src":"14984:695:120","nodes":[],"statements":[{"assignments":[69142],"declarations":[{"constant":false,"id":69142,"mutability":"mutable","name":"transitionsHashes","nameLocation":"15007:17:120","nodeType":"VariableDeclaration","scope":69213,"src":"14994:30:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":69141,"name":"bytes","nodeType":"ElementaryTypeName","src":"14994:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":69143,"nodeType":"VariableDeclarationStatement","src":"14994:30:120"},{"body":{"id":69207,"nodeType":"Block","src":"15085:542:120","statements":[{"assignments":[69159],"declarations":[{"constant":false,"id":69159,"mutability":"mutable","name":"transition","nameLocation":"15129:10:120","nodeType":"VariableDeclaration","scope":69207,"src":"15099:40:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition"},"typeName":{"id":69158,"nodeType":"UserDefinedTypeName","pathNode":{"id":69157,"name":"Gear.StateTransition","nameLocations":["15099:4:120","15104:15:120"],"nodeType":"IdentifierPath","referencedDeclaration":69605,"src":"15099:20:120"},"referencedDeclaration":69605,"src":"15099:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_storage_ptr","typeString":"struct Gear.StateTransition"}},"visibility":"internal"}],"id":69163,"initialValue":{"baseExpression":{"id":69160,"name":"_transitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69136,"src":"15142:12:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$69605_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":69162,"indexExpression":{"id":69161,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69145,"src":"15155:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15142:15:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"15099:58:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":69172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"expression":{"id":69165,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69132,"src":"15197:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":69166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15204:12:120","memberName":"protocolData","nodeType":"MemberAccess","referencedDeclaration":65257,"src":"15197:19:120","typeDescriptions":{"typeIdentifier":"t_struct$_ProtocolData_$69583_storage","typeString":"struct Gear.ProtocolData storage ref"}},"id":69167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15217:8:120","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":69578,"src":"15197:28:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":69170,"indexExpression":{"expression":{"id":69168,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69159,"src":"15226:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":69169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15237:7:120","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":69590,"src":"15226:18:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15197:48:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":69171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15249:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15197:53:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":69173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15252:49:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":69164,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"15172:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":69174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15172:143:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69175,"nodeType":"ExpressionStatement","src":"15172:143:120"},{"expression":{"arguments":[{"expression":{"id":69182,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69159,"src":"15386:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":69183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15397:7:120","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":69590,"src":"15386:18:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":69184,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69159,"src":"15406:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":69185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15417:14:120","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":69596,"src":"15406:25:120","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"expression":{"id":69177,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69132,"src":"15343:6:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":69178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15350:13:120","memberName":"implAddresses","nodeType":"MemberAccess","referencedDeclaration":65241,"src":"15343:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_AddressBook_$69512_storage","typeString":"struct Gear.AddressBook storage ref"}},"id":69179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15364:11:120","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":69511,"src":"15343:32:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":69176,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65497,"src":"15330:12:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$65497_$","typeString":"type(contract IWrappedVara)"}},"id":69180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15330:46:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$65497","typeString":"contract IWrappedVara"}},"id":69181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15377:8:120","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43780,"src":"15330:55:120","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":69186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15330:102:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":69187,"nodeType":"ExpressionStatement","src":"15330:102:120"},{"assignments":[69189],"declarations":[{"constant":false,"id":69189,"mutability":"mutable","name":"transitionHash","nameLocation":"15455:14:120","nodeType":"VariableDeclaration","scope":69207,"src":"15447:22:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69188,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15447:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":69197,"initialValue":{"arguments":[{"id":69195,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69159,"src":"15523:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}],"expression":{"arguments":[{"expression":{"id":69191,"name":"transition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69159,"src":"15480:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_calldata_ptr","typeString":"struct Gear.StateTransition calldata"}},"id":69192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15491:7:120","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":69590,"src":"15480:18:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":69190,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65178,"src":"15472:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$65178_$","typeString":"type(contract IMirror)"}},"id":69193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15472:27:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$65178","typeString":"contract IMirror"}},"id":69194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15500:22:120","memberName":"performStateTransition","nodeType":"MemberAccess","referencedDeclaration":65177,"src":"15472:50:120","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_StateTransition_$69605_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Gear.StateTransition memory) external returns (bytes32)"}},"id":69196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15472:62:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15447:87:120"},{"expression":{"id":69205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":69198,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69142,"src":"15549:17:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":69202,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69142,"src":"15582:17:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":69203,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69189,"src":"15601:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":69200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15569:5:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":69199,"name":"bytes","nodeType":"ElementaryTypeName","src":"15569:5:120","typeDescriptions":{}}},"id":69201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15575:6:120","memberName":"concat","nodeType":"MemberAccess","src":"15569:12:120","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":69204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15569:47:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"15549:67:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":69206,"nodeType":"ExpressionStatement","src":"15549:67:120"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":69151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":69148,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69145,"src":"15055:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":69149,"name":"_transitions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69136,"src":"15059:12:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$69605_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition calldata[] calldata"}},"id":69150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15072:6:120","memberName":"length","nodeType":"MemberAccess","src":"15059:19:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15055:23:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":69208,"initializationExpression":{"assignments":[69145],"declarations":[{"constant":false,"id":69145,"mutability":"mutable","name":"i","nameLocation":"15048:1:120","nodeType":"VariableDeclaration","scope":69208,"src":"15040:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":69144,"name":"uint256","nodeType":"ElementaryTypeName","src":"15040:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":69147,"initialValue":{"hexValue":"30","id":69146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15052:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15040:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":69153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15080:3:120","subExpression":{"id":69152,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69145,"src":"15080:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":69154,"nodeType":"ExpressionStatement","src":"15080:3:120"},"nodeType":"ForStatement","src":"15035:592:120"},{"expression":{"arguments":[{"id":69210,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69142,"src":"15654:17:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":69209,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15644:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":69211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15644:28:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":69140,"id":69212,"nodeType":"Return","src":"15637:35:120"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitTransitions","nameLocation":"14849:18:120","parameters":{"id":69137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69132,"mutability":"mutable","name":"router","nameLocation":"14884:6:120","nodeType":"VariableDeclaration","scope":69214,"src":"14868:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":69131,"nodeType":"UserDefinedTypeName","pathNode":{"id":69130,"name":"Storage","nameLocations":["14868:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"14868:7:120"},"referencedDeclaration":65258,"src":"14868:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"},{"constant":false,"id":69136,"mutability":"mutable","name":"_transitions","nameLocation":"14924:12:120","nodeType":"VariableDeclaration","scope":69214,"src":"14892:44:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$69605_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Gear.StateTransition[]"},"typeName":{"baseType":{"id":69134,"nodeType":"UserDefinedTypeName","pathNode":{"id":69133,"name":"Gear.StateTransition","nameLocations":["14892:4:120","14897:15:120"],"nodeType":"IdentifierPath","referencedDeclaration":69605,"src":"14892:20:120"},"referencedDeclaration":69605,"src":"14892:20:120","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$69605_storage_ptr","typeString":"struct Gear.StateTransition"}},"id":69135,"nodeType":"ArrayTypeName","src":"14892:22:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$69605_storage_$dyn_storage_ptr","typeString":"struct Gear.StateTransition[]"}},"visibility":"internal"}],"src":"14867:70:120"},"returnParameters":{"id":69140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69139,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":69214,"src":"14971:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69138,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14971:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14970:9:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":69294,"nodeType":"FunctionDefinition","src":"15685:618:120","nodes":[],"body":{"id":69293,"nodeType":"Block","src":"15846:457:120","nodes":[],"statements":[{"body":{"id":69252,"nodeType":"Block","src":"15910:114:120","statements":[{"assignments":[69238],"declarations":[{"constant":false,"id":69238,"mutability":"mutable","name":"_validator","nameLocation":"15932:10:120","nodeType":"VariableDeclaration","scope":69252,"src":"15924:18:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69237,"name":"address","nodeType":"ElementaryTypeName","src":"15924:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":69243,"initialValue":{"baseExpression":{"expression":{"id":69239,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69217,"src":"15945:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":69240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15957:4:120","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":69502,"src":"15945:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":69242,"indexExpression":{"id":69241,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69226,"src":"15962:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15945:19:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15924:40:120"},{"expression":{"id":69250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":69244,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69217,"src":"15978:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":69247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15990:3:120","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":69499,"src":"15978:15:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":69248,"indexExpression":{"id":69246,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69238,"src":"15994:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15978:27:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":69249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16008:5:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"15978:35:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":69251,"nodeType":"ExpressionStatement","src":"15978:35:120"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":69233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":69229,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69226,"src":"15876:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":69230,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69217,"src":"15880:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":69231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15892:4:120","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":69502,"src":"15880:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":69232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15897:6:120","memberName":"length","nodeType":"MemberAccess","src":"15880:23:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15876:27:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":69253,"initializationExpression":{"assignments":[69226],"declarations":[{"constant":false,"id":69226,"mutability":"mutable","name":"i","nameLocation":"15869:1:120","nodeType":"VariableDeclaration","scope":69253,"src":"15861:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":69225,"name":"uint256","nodeType":"ElementaryTypeName","src":"15861:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":69228,"initialValue":{"hexValue":"30","id":69227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15873:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15861:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":69235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15905:3:120","subExpression":{"id":69234,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69226,"src":"15905:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":69236,"nodeType":"ExpressionStatement","src":"15905:3:120"},"nodeType":"ForStatement","src":"15856:168:120"},{"body":{"id":69279,"nodeType":"Block","src":"16085:111:120","statements":[{"assignments":[69266],"declarations":[{"constant":false,"id":69266,"mutability":"mutable","name":"_validator","nameLocation":"16107:10:120","nodeType":"VariableDeclaration","scope":69279,"src":"16099:18:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69265,"name":"address","nodeType":"ElementaryTypeName","src":"16099:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":69270,"initialValue":{"baseExpression":{"id":69267,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69220,"src":"16120:14:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":69269,"indexExpression":{"id":69268,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69255,"src":"16135:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16120:17:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16099:38:120"},{"expression":{"id":69277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":69271,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69217,"src":"16151:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":69274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16163:3:120","memberName":"map","nodeType":"MemberAccess","referencedDeclaration":69499,"src":"16151:15:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":69275,"indexExpression":{"id":69273,"name":"_validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69266,"src":"16167:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16151:27:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":69276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16181:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16151:34:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":69278,"nodeType":"ExpressionStatement","src":"16151:34:120"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":69261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":69258,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69255,"src":"16053:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":69259,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69220,"src":"16057:14:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":69260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16072:6:120","memberName":"length","nodeType":"MemberAccess","src":"16057:21:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16053:25:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":69280,"initializationExpression":{"assignments":[69255],"declarations":[{"constant":false,"id":69255,"mutability":"mutable","name":"i","nameLocation":"16046:1:120","nodeType":"VariableDeclaration","scope":69280,"src":"16038:9:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":69254,"name":"uint256","nodeType":"ElementaryTypeName","src":"16038:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":69257,"initialValue":{"hexValue":"30","id":69256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16050:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16038:13:120"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":69263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16080:3:120","subExpression":{"id":69262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69255,"src":"16080:1:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":69264,"nodeType":"ExpressionStatement","src":"16080:3:120"},"nodeType":"ForStatement","src":"16033:163:120"},{"expression":{"id":69285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":69281,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69217,"src":"16205:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":69283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16217:4:120","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":69502,"src":"16205:16:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":69284,"name":"_newValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69220,"src":"16224:14:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"16205:33:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":69286,"nodeType":"ExpressionStatement","src":"16205:33:120"},{"expression":{"id":69291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":69287,"name":"_validators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69217,"src":"16248:11:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators storage pointer"}},"id":69289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16260:16:120","memberName":"useFromTimestamp","nodeType":"MemberAccess","referencedDeclaration":69504,"src":"16248:28:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":69290,"name":"_useFromTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69222,"src":"16279:17:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16248:48:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":69292,"nodeType":"ExpressionStatement","src":"16248:48:120"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_resetValidators","nameLocation":"15694:16:120","parameters":{"id":69223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69217,"mutability":"mutable","name":"_validators","nameLocation":"15744:11:120","nodeType":"VariableDeclaration","scope":69294,"src":"15720:35:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators"},"typeName":{"id":69216,"nodeType":"UserDefinedTypeName","pathNode":{"id":69215,"name":"Gear.Validators","nameLocations":["15720:4:120","15725:10:120"],"nodeType":"IdentifierPath","referencedDeclaration":69505,"src":"15720:15:120"},"referencedDeclaration":69505,"src":"15720:15:120","typeDescriptions":{"typeIdentifier":"t_struct$_Validators_$69505_storage_ptr","typeString":"struct Gear.Validators"}},"visibility":"internal"},{"constant":false,"id":69220,"mutability":"mutable","name":"_newValidators","nameLocation":"15782:14:120","nodeType":"VariableDeclaration","scope":69294,"src":"15765:31:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":69218,"name":"address","nodeType":"ElementaryTypeName","src":"15765:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":69219,"nodeType":"ArrayTypeName","src":"15765:9:120","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":69222,"mutability":"mutable","name":"_useFromTimestamp","nameLocation":"15814:17:120","nodeType":"VariableDeclaration","scope":69294,"src":"15806:25:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":69221,"name":"uint256","nodeType":"ElementaryTypeName","src":"15806:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15710:127:120"},"returnParameters":{"id":69224,"nodeType":"ParameterList","parameters":[],"src":"15846:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":69307,"nodeType":"FunctionDefinition","src":"16309:192:120","nodes":[],"body":{"id":69306,"nodeType":"Block","src":"16374:127:120","nodes":[],"statements":[{"assignments":[69301],"declarations":[{"constant":false,"id":69301,"mutability":"mutable","name":"slot","nameLocation":"16392:4:120","nodeType":"VariableDeclaration","scope":69306,"src":"16384:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16384:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":69304,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":69302,"name":"_getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69319,"src":"16399:15:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":69303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16399:17:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"16384:32:120"},{"AST":{"nativeSrc":"16452:43:120","nodeType":"YulBlock","src":"16452:43:120","statements":[{"nativeSrc":"16466:19:120","nodeType":"YulAssignment","src":"16466:19:120","value":{"name":"slot","nativeSrc":"16481:4:120","nodeType":"YulIdentifier","src":"16481:4:120"},"variableNames":[{"name":"router.slot","nativeSrc":"16466:11:120","nodeType":"YulIdentifier","src":"16466:11:120"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":69298,"isOffset":false,"isSlot":true,"src":"16466:11:120","suffix":"slot","valueSize":1},{"declaration":69301,"isOffset":false,"isSlot":false,"src":"16481:4:120","valueSize":1}],"flags":["memory-safe"],"id":69305,"nodeType":"InlineAssembly","src":"16427:68:120"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_router","nameLocation":"16318:7:120","parameters":{"id":69295,"nodeType":"ParameterList","parameters":[],"src":"16325:2:120"},"returnParameters":{"id":69299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69298,"mutability":"mutable","name":"router","nameLocation":"16366:6:120","nodeType":"VariableDeclaration","scope":69307,"src":"16350:22:120","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":69297,"nodeType":"UserDefinedTypeName","pathNode":{"id":69296,"name":"Storage","nameLocations":["16350:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65258,"src":"16350:7:120"},"referencedDeclaration":65258,"src":"16350:7:120","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$65258_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"16349:24:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":69319,"nodeType":"FunctionDefinition","src":"16507:128:120","nodes":[],"body":{"id":69318,"nodeType":"Block","src":"16565:70:120","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":69314,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67840,"src":"16609:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":69312,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44431,"src":"16582:11:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44431_$","typeString":"type(library StorageSlot)"}},"id":69313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16594:14:120","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44364,"src":"16582:26:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44319_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":69315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16582:40:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44319_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":69316,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16623:5:120","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44318,"src":"16582:46:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":69311,"id":69317,"nodeType":"Return","src":"16575:53:120"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorageSlot","nameLocation":"16516:15:120","parameters":{"id":69308,"nodeType":"ParameterList","parameters":[],"src":"16531:2:120"},"returnParameters":{"id":69311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69310,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":69319,"src":"16556:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69309,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16556:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16555:9:120"},"scope":69365,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":69364,"nodeType":"FunctionDefinition","src":"16641:252:120","nodes":[],"body":{"id":69363,"nodeType":"Block","src":"16709:184:120","nodes":[],"statements":[{"assignments":[69327],"declarations":[{"constant":false,"id":69327,"mutability":"mutable","name":"slot","nameLocation":"16727:4:120","nodeType":"VariableDeclaration","scope":69363,"src":"16719:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":69326,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16719:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":69353,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":69352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":69341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":69336,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69321,"src":"16779:9:120","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":69335,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16773:5:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":69334,"name":"bytes","nodeType":"ElementaryTypeName","src":"16773:5:120","typeDescriptions":{}}},"id":69337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16773:16:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":69333,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16763:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":69338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16763:27:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":69332,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16755:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":69331,"name":"uint256","nodeType":"ElementaryTypeName","src":"16755:7:120","typeDescriptions":{}}},"id":69339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16755:36:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":69340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16794:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16755:40:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":69329,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16744:3:120","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":69330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16748:6:120","memberName":"encode","nodeType":"MemberAccess","src":"16744:10:120","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":69342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16744:52:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":69328,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16734:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":69343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16734:63:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":69351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"16800:23:120","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":69348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16817:4:120","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":69347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16809:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":69346,"name":"uint256","nodeType":"ElementaryTypeName","src":"16809:7:120","typeDescriptions":{}}},"id":69349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16809:13:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":69345,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16801:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":69344,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16801:7:120","typeDescriptions":{}}},"id":69350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16801:22:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16734:89:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"16719:104:120"},{"expression":{"id":69361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":69357,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67840,"src":"16860:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":69354,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44431,"src":"16833:11:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$44431_$","typeString":"type(library StorageSlot)"}},"id":69356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16845:14:120","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":44364,"src":"16833:26:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$44319_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":69358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16833:40:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$44319_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":69359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16874:5:120","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":44318,"src":"16833:46:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":69360,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69327,"src":"16882:4:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16833:53:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":69362,"nodeType":"ExpressionStatement","src":"16833:53:120"}]},"implemented":true,"kind":"function","modifiers":[{"id":69324,"kind":"modifierInvocation","modifierName":{"id":69323,"name":"onlyOwner","nameLocations":["16699:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":40227,"src":"16699:9:120"},"nodeType":"ModifierInvocation","src":"16699:9:120"}],"name":"_setStorageSlot","nameLocation":"16650:15:120","parameters":{"id":69322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69321,"mutability":"mutable","name":"namespace","nameLocation":"16680:9:120","nodeType":"VariableDeclaration","scope":69364,"src":"16666:23:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":69320,"name":"string","nodeType":"ElementaryTypeName","src":"16666:6:120","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"16665:25:120"},"returnParameters":{"id":69325,"nodeType":"ParameterList","parameters":[],"src":"16709:0:120"},"scope":69365,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":67832,"name":"IRouter","nameLocations":["709:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":65486,"src":"709:7:120"},"id":67833,"nodeType":"InheritanceSpecifier","src":"709:7:120"},{"baseName":{"id":67834,"name":"OwnableUpgradeable","nameLocations":["718:18:120"],"nodeType":"IdentifierPath","referencedDeclaration":40332,"src":"718:18:120"},"id":67835,"nodeType":"InheritanceSpecifier","src":"718:18:120"},{"baseName":{"id":67836,"name":"ReentrancyGuardTransient","nameLocations":["738:24:120"],"nodeType":"IdentifierPath","referencedDeclaration":44307,"src":"738:24:120"},"id":67837,"nodeType":"InheritanceSpecifier","src":"738:24:120"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[69365,44307,40332,41480,40586,65486],"name":"Router","nameLocation":"699:6:120","scope":69366,"usedErrors":[40168,40173,40349,40352,44174,44180,44251,44961,44966,44971],"usedEvents":[40179,40357,65263,65270,65277,65282,65289,65296,65299]}],"license":"UNLICENSED"},"id":120} \ No newline at end of file diff --git a/ethexe/ethereum/TransparentUpgradeableProxy.json b/ethexe/ethereum/TransparentUpgradeableProxy.json index 9c4b49fde5a..b9e25097781 100644 --- a/ethexe/ethereum/TransparentUpgradeableProxy.json +++ b/ethexe/ethereum/TransparentUpgradeableProxy.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_logic","type":"address","internalType":"address"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidAdmin","inputs":[{"name":"admin","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"ProxyDeniedAdminAccess","inputs":[]}],"bytecode":{"object":"0x60a0604052610a99803803806100148161026b565b92833981016060828203126102675761002c82610290565b61003860208401610290565b604084015190936001600160401b03821161026757019180601f8401121561026757825161006d610068826102a4565b61026b565b9381855260208501926020838301011161026757815f926020809301855e85010152813b15610246577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561022e575f809161012d945190845af43d15610226573d9161011e610068846102a4565b9283523d5f602085013e6102bf565b505b604051906104428083016001600160401b0381118482101761021257602092849261063784396001600160a01b031681520301905ff080156102075760018060a01b0316806080525f80516020610a79833981519152547f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6040805160018060a01b0384168152846020820152a181156101f4576001600160a01b031916175f80516020610a7983398151915255604051610319908161031e82396080518160070152f35b633173bdd160e11b5f525f60045260245ffd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b6060916102bf565b505050341561012f5763b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761021257604052565b51906001600160a01b038216820361026757565b6001600160401b03811161021257601f01601f191660200190565b906102e357508051156102d457805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610314575b6102f4575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102ec56fe6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea264697066735822122081381172d68bc45983a1c9fb05d5600627b8938eb5cd3b671f9f784b16dbf57064736f6c634300081a003360803460b857601f61044238819003918201601f19168301916001600160401b0383118484101760bc5780849260209460405283398101031260b857516001600160a01b0381169081900360b857801560a5575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361037190816100d18239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f803560e01c8063715018a6146102785780638da5cb5b146102515780639623609d1461012e578063ad3cb1cc146100e15763f2fde38b14610051575f80fd5b346100de5760203660031901126100de576004356001600160a01b038116908190036100da5761007f610315565b80156100c65781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b5080fd5b80fd5b50346100de57806003193601126100de575061012a6040516101046040826102cf565b60058152640352e302e360dc1b60208201526040519182916020835260208301906102f1565b0390f35b506060366003190112610239576004356001600160a01b03811690819003610239576024356001600160a01b038116908190036102395760443567ffffffffffffffff8111610239573660238201121561023957806004013567ffffffffffffffff811161023d57604051916101ae601f8301601f1916602001846102cf565b818352366024838301011161023957815f9260246020930183860137830101526101d6610315565b823b156102395761020c925f9260405180958194829363278f794360e11b845260048401526040602484015260448301906102f1565b039134905af1801561022e57610220575080f35b61022c91505f906102cf565b005b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b34610239575f366003190112610239575f546040516001600160a01b039091168152602090f35b34610239575f36600319011261023957610290610315565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f8019910116810190811067ffffffffffffffff82111761023d57604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b5f546001600160a01b0316330361032857565b63118cdaa760e01b5f523360045260245ffdfea2646970667358221220ee89fe47c8fabf223bbfbb042ed5177bc9b5c55ede5115bf0576dc2d535100ae64736f6c634300081a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","sourceMap":"4239:2231:52:-:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4239:2231:52;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;4239:2231:52;;;;;;;;;;;1758:29:46;;:34;1754:119;;821:66;4239:2231:52;;-1:-1:-1;;;;;;4239:2231:52;-1:-1:-1;;;;;4239:2231:52;;;;;;;;2417:36:46;-1:-1:-1;;2417:36:46;4239:2231:52;;2468:15:46;:11;;-1:-1:-1;4049:25:58;;4091:55;4049:25;;;;;;4239:2231:52;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;4239:2231:52;;;;4091:55:58;:::i;:::-;;2464:148:46;4239:2231:52;;;5215:28;;;;-1:-1:-1;;;;;5215:28:52;;;;;;;;4239:2231;5215:28;;;;;;-1:-1:-1;;;;;4239:2231:52;;;5215:28;;;-1:-1:-1;5215:28:52;;;;;4239:2231;;;;;;5198:46;;;-1:-1:-1;;;;;;;;;;;2878:66:46;3900:43;4239:2231:52;;;;;;;;;;;;;;;;;3900:43:46;3559:22;;3555:91;;-1:-1:-1;;;;;;4239:2231:52;;-1:-1:-1;;;;;;;;;;;4239:2231:52;;;;;;;;;5198:46;4239:2231;;;;;;3555:91:46;3604:31;;;-1:-1:-1;3604:31:46;-1:-1:-1;3604:31:46;4239:2231:52;;-1:-1:-1;3604:31:46;5215:28:52;4239:2231;;;-1:-1:-1;4239:2231:52;;;;;5215:28;4239:2231;;;-1:-1:-1;4239:2231:52;;;;;-1:-1:-1;4239:2231:52;;;;4091:55:58;:::i;2464:148:46:-;6173:9;;;;6169:70;2464:148;6169:70;6209:19;;;-1:-1:-1;6209:19:46;;-1:-1:-1;6209:19:46;1754:119;-1:-1:-1;;;;;1815:47:46;;;-1:-1:-1;;;;;4239:2231:52;;;;1815:47:46;4239:2231:52;;;1815:47:46;4239:2231:52;-1:-1:-1;4239:2231:52;;;;;;;;;-1:-1:-1;;4239:2231:52;;;-1:-1:-1;;;;;4239:2231:52;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;4239:2231:52;;;;;;:::o;:::-;-1:-1:-1;;;;;4239:2231:52;;;;;;-1:-1:-1;;4239:2231:52;;;;:::o;4421:582:58:-;;4593:8;;-1:-1:-1;4239:2231:52;;5674:21:58;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;4239:2231:52;;4841:22:58;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:58;4917:24;;;-1:-1:-1;;;;;4239:2231:52;;;;4917:24:58;4239:2231:52;;;4917:24:58;4841:49;4867:18;;;:23;4841:49;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea264697066735822122081381172d68bc45983a1c9fb05d5600627b8938eb5cd3b671f9f784b16dbf57064736f6c634300081a0033","sourceMap":"4239:2231:52:-:0;;;5741:10;5525:6;-1:-1:-1;;;;;4239:2231:52;5741:27;4239:2231;;5788:7;;-1:-1:-1;;;;;;5788:7:52;-1:-1:-1;;;5788:65:52;5799:54;;5880:24;;;5788:7;5880:24;;5788:7;5880:24;5784:201;;;:::i;:::-;4239:2231;5737:306;821:66:46;;-1:-1:-1;;;;;;;;;4239:2231:52;1019:819:47;-1:-1:-1;;1019:819:47;;;;;;;-1:-1:-1;1019:819:47;;;;;;-1:-1:-1;1019:819:47;;;-1:-1:-1;1019:819:47;4239:2231:52;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4239:2231:52;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;-1:-1:-1;;4239:2231:52;;;;:::o;6251:217::-;6366:8;6375:1;4239:2231;;;;6366:8;-1:-1:-1;;4239:2231:52;;;;6375:1;4239:2231;-1:-1:-1;;;;;4239:2231:52;;;;;;;;;;;;;;;;6366:8;4239:2231;;;;;;;;6375:1;4239:2231;;;;;;;:::i;:::-;;:::i;:::-;;;;;6366:8;4239:2231;;;;;;;;;;6366:8;4239:2231;;6456:4;4239:2231;;;;;;;;;;6456:4;:::i;:::-;6251:217::o;4239:2231::-;6366:8;4239:2231;;2274:344:46;;1758:29;;:34;1754:119;;821:66;4239:2231:52;;-1:-1:-1;;;;;;4239:2231:52;-1:-1:-1;;;;;4239:2231:52;;;;;;;;2417:36:46;-1:-1:-1;;2417:36:46;4239:2231:52;;2468:15:46;:11;;2499:53;;;:::i;:::-;;2274:344::o;2464:148::-;6173:9;;;6169:70;;2274:344::o;6169:70::-;6209:19;;;1791:1;6209:19;;1791:1;6209:19;1754:119;-1:-1:-1;;;;1791:1:46;1815:47;;;-1:-1:-1;;;;;4239:2231:52;;;;1815:47:46;4239:2231:52;;;1815:47:46;3900:253:58;4049:25;3900:253;4091:55;3900:253;4049:25;;;;;;;;4239:2231:52;;;;;;;;;;:::i;:::-;;;;;4049:25:58;;4239:2231:52;;;4091:55:58;:::i;:::-;3900:253;:::o;4239:2231:52:-;;;4421:582:58;;4593:8;;-1:-1:-1;4239:2231:52;;5674:21:58;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;4239:2231:52;;4841:22:58;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:58;4917:24;;;-1:-1:-1;;;;;4239:2231:52;;;;4917:24:58;4239:2231:52;;;4917:24:58;4841:49;4867:18;;;:23;4841:49;","linkReferences":{},"immutableReferences":{"42438":[{"start":7,"length":32}]}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself. 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating the proxy admin cannot fallback to the target implementation. These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract. IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot is generally fine if the implementation is trusted. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"ProxyDeniedAdminAccess()\":[{\"details\":\"The proxy caller is the current admin, and can't fallback to the proxy target.\"}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0x31b7f755099238afdf101d132e356ca59a2f5aa3c9d6957bc320c3a89c6b29a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c1ef7fce6c908e6912cbea81d4655489fb29e328b03502b6dc680a4eda65ae5\",\"dweb:/ipfs/QmQMasWF2fg4DvwYuXto8qvkDYVsrTDmBCgjRPTvn6PgpD\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5\",\"dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x3cfd70b5e57ac16134caf206c6a71ea5ff113bc2032cd6d845231793f5c62995\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://984097ae51f9be9b94d2a3f5be7f284bd525fd9f0a0ccdca34cfaa7f0e1625d1\",\"dweb:/ipfs/QmXSL4rFMM25pJzvuTzN1DX4ddAwTCnmxS2axDwaZyzNHL\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0x11e3f4156c76feda27ffa117c3f624972471124411067e8f02c9a6909f35d035\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://beb0d9fe2c5fae15f1ca8a22b2c8cfaaa75984f6c8a94534ba85f98366caa6a5\",\"dweb:/ipfs/QmQEFQtyLACb6j7XajAT7Z1KzANE6JzqDYMEQeG8yzrfqP\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b\",\"dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"type":"error","name":"ERC1967InvalidAdmin"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"ProxyDeniedAdminAccess"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":"TransparentUpgradeableProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0x31b7f755099238afdf101d132e356ca59a2f5aa3c9d6957bc320c3a89c6b29a8","urls":["bzz-raw://6c1ef7fce6c908e6912cbea81d4655489fb29e328b03502b6dc680a4eda65ae5","dweb:/ipfs/QmQMasWF2fg4DvwYuXto8qvkDYVsrTDmBCgjRPTvn6PgpD"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311","urls":["bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5","dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":{"keccak256":"0x3cfd70b5e57ac16134caf206c6a71ea5ff113bc2032cd6d845231793f5c62995","urls":["bzz-raw://984097ae51f9be9b94d2a3f5be7f284bd525fd9f0a0ccdca34cfaa7f0e1625d1","dweb:/ipfs/QmXSL4rFMM25pJzvuTzN1DX4ddAwTCnmxS2axDwaZyzNHL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"keccak256":"0x11e3f4156c76feda27ffa117c3f624972471124411067e8f02c9a6909f35d035","urls":["bzz-raw://beb0d9fe2c5fae15f1ca8a22b2c8cfaaa75984f6c8a94534ba85f98366caa6a5","dweb:/ipfs/QmQEFQtyLACb6j7XajAT7Z1KzANE6JzqDYMEQeG8yzrfqP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84","urls":["bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b","dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","id":42548,"exportedSymbols":{"ERC1967Proxy":[41878],"ERC1967Utils":[42172],"IERC1967":[41511],"ITransparentUpgradeableProxy":[42433],"ProxyAdmin":[42412],"TransparentUpgradeableProxy":[42547]},"nodeType":"SourceUnit","src":"133:6338:52","nodes":[{"id":42414,"nodeType":"PragmaDirective","src":"133:24:52","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":42416,"nodeType":"ImportDirective","src":"159:57:52","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"../ERC1967/ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":42548,"sourceUnit":42173,"symbolAliases":[{"foreign":{"id":42415,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42172,"src":"167:12:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":42418,"nodeType":"ImportDirective","src":"217:57:52","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","file":"../ERC1967/ERC1967Proxy.sol","nameLocation":"-1:-1:-1","scope":42548,"sourceUnit":41879,"symbolAliases":[{"foreign":{"id":42417,"name":"ERC1967Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41878,"src":"225:12:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":42420,"nodeType":"ImportDirective","src":"275:55:52","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","file":"../../interfaces/IERC1967.sol","nameLocation":"-1:-1:-1","scope":42548,"sourceUnit":41512,"symbolAliases":[{"foreign":{"id":42419,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41511,"src":"283:8:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":42422,"nodeType":"ImportDirective","src":"331:44:52","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","file":"./ProxyAdmin.sol","nameLocation":"-1:-1:-1","scope":42548,"sourceUnit":42413,"symbolAliases":[{"foreign":{"id":42421,"name":"ProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42412,"src":"339:10:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":42433,"nodeType":"ContractDefinition","src":"823:127:52","nodes":[{"id":42432,"nodeType":"FunctionDefinition","src":"880:68:52","nodes":[],"functionSelector":"4f1ef286","implemented":false,"kind":"function","modifiers":[],"name":"upgradeToAndCall","nameLocation":"889:16:52","parameters":{"id":42430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42427,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42432,"src":"906:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42426,"name":"address","nodeType":"ElementaryTypeName","src":"906:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42429,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42432,"src":"915:14:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":42428,"name":"bytes","nodeType":"ElementaryTypeName","src":"915:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"905:25:52"},"returnParameters":{"id":42431,"nodeType":"ParameterList","parameters":[],"src":"947:0:52"},"scope":42433,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":42424,"name":"IERC1967","nameLocations":["865:8:52"],"nodeType":"IdentifierPath","referencedDeclaration":41511,"src":"865:8:52"},"id":42425,"nodeType":"InheritanceSpecifier","src":"865:8:52"}],"canonicalName":"ITransparentUpgradeableProxy","contractDependencies":[],"contractKind":"interface","documentation":{"id":42423,"nodeType":"StructuredDocumentation","src":"377:445:52","text":" @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\n does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch\n mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\n include them in the ABI so this interface must be used to interact with it."},"fullyImplemented":false,"linearizedBaseContracts":[42433,41511],"name":"ITransparentUpgradeableProxy","nameLocation":"833:28:52","scope":42548,"usedErrors":[],"usedEvents":[41498,41505,41510]},{"id":42547,"nodeType":"ContractDefinition","src":"4239:2231:52","nodes":[{"id":42438,"nodeType":"VariableDeclaration","src":"4633:32:52","nodes":[],"constant":false,"mutability":"immutable","name":"_admin","nameLocation":"4659:6:52","scope":42547,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42437,"name":"address","nodeType":"ElementaryTypeName","src":"4633:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"id":42441,"nodeType":"ErrorDefinition","src":"4779:31:52","nodes":[],"documentation":{"id":42439,"nodeType":"StructuredDocumentation","src":"4672:102:52","text":" @dev The proxy caller is the current admin, and can't fallback to the proxy target."},"errorSelector":"d2b576ec","name":"ProxyDeniedAdminAccess","nameLocation":"4785:22:52","parameters":{"id":42440,"nodeType":"ParameterList","parameters":[],"src":"4807:2:52"}},{"id":42474,"nodeType":"FunctionDefinition","src":"5082:296:52","nodes":[],"body":{"id":42473,"nodeType":"Block","src":"5188:190:52","nodes":[],"statements":[{"expression":{"id":42464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42455,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42438,"src":"5198:6:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":42461,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42446,"src":"5230:12:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"5215:14:52","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_ProxyAdmin_$42412_$","typeString":"function (address) returns (contract ProxyAdmin)"},"typeName":{"id":42459,"nodeType":"UserDefinedTypeName","pathNode":{"id":42458,"name":"ProxyAdmin","nameLocations":["5219:10:52"],"nodeType":"IdentifierPath","referencedDeclaration":42412,"src":"5219:10:52"},"referencedDeclaration":42412,"src":"5219:10:52","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$42412","typeString":"contract ProxyAdmin"}}},"id":42462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5215:28:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$42412","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$42412","typeString":"contract ProxyAdmin"}],"id":42457,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5207:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":42456,"name":"address","nodeType":"ElementaryTypeName","src":"5207:7:52","typeDescriptions":{}}},"id":42463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5207:37:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5198:46:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":42465,"nodeType":"ExpressionStatement","src":"5198:46:52"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":42469,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42483,"src":"5357:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":42470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5357:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":42466,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42172,"src":"5332:12:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$42172_$","typeString":"type(library ERC1967Utils)"}},"id":42468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5345:11:52","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":42054,"src":"5332:24:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":42471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5332:39:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42472,"nodeType":"ExpressionStatement","src":"5332:39:52"}]},"documentation":{"id":42442,"nodeType":"StructuredDocumentation","src":"4816:261:52","text":" @dev Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`,\n backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in\n {ERC1967Proxy-constructor}."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":42451,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42444,"src":"5173:6:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42452,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42448,"src":"5181:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":42453,"kind":"baseConstructorSpecifier","modifierName":{"id":42450,"name":"ERC1967Proxy","nameLocations":["5160:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":41878,"src":"5160:12:52"},"nodeType":"ModifierInvocation","src":"5160:27:52"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":42449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42444,"mutability":"mutable","name":"_logic","nameLocation":"5102:6:52","nodeType":"VariableDeclaration","scope":42474,"src":"5094:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42443,"name":"address","nodeType":"ElementaryTypeName","src":"5094:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42446,"mutability":"mutable","name":"initialOwner","nameLocation":"5118:12:52","nodeType":"VariableDeclaration","scope":42474,"src":"5110:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42445,"name":"address","nodeType":"ElementaryTypeName","src":"5110:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42448,"mutability":"mutable","name":"_data","nameLocation":"5145:5:52","nodeType":"VariableDeclaration","scope":42474,"src":"5132:18:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42447,"name":"bytes","nodeType":"ElementaryTypeName","src":"5132:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5093:58:52"},"returnParameters":{"id":42454,"nodeType":"ParameterList","parameters":[],"src":"5188:0:52"},"scope":42547,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":42483,"nodeType":"FunctionDefinition","src":"5445:93:52","nodes":[],"body":{"id":42482,"nodeType":"Block","src":"5508:30:52","nodes":[],"statements":[{"expression":{"id":42480,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42438,"src":"5525:6:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":42479,"id":42481,"nodeType":"Return","src":"5518:13:52"}]},"documentation":{"id":42475,"nodeType":"StructuredDocumentation","src":"5384:56:52","text":" @dev Returns the admin of this proxy."},"implemented":true,"kind":"function","modifiers":[],"name":"_proxyAdmin","nameLocation":"5454:11:52","parameters":{"id":42476,"nodeType":"ParameterList","parameters":[],"src":"5465:2:52"},"returnParameters":{"id":42479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42478,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42483,"src":"5499:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42477,"name":"address","nodeType":"ElementaryTypeName","src":"5499:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5498:9:52"},"scope":42547,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":42517,"nodeType":"FunctionDefinition","src":"5680:369:52","nodes":[],"body":{"id":42516,"nodeType":"Block","src":"5727:322:52","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":42492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42488,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5741:3:52","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":42489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:6:52","memberName":"sender","nodeType":"MemberAccess","src":"5741:10:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":42490,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42483,"src":"5755:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":42491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5755:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5741:27:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":42514,"nodeType":"Block","src":"6001:42:52","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":42509,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6015:5:52","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$42547_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":42511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:9:52","memberName":"_fallback","nodeType":"MemberAccess","referencedDeclaration":42199,"src":"6015:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":42512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6015:17:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42513,"nodeType":"ExpressionStatement","src":"6015:17:52"}]},"id":42515,"nodeType":"IfStatement","src":"5737:306:52","trueBody":{"id":42508,"nodeType":"Block","src":"5770:225:52","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":42498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42493,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5788:3:52","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":42494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5792:3:52","memberName":"sig","nodeType":"MemberAccess","src":"5788:7:52","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":42495,"name":"ITransparentUpgradeableProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42433,"src":"5799:28:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ITransparentUpgradeableProxy_$42433_$","typeString":"type(contract ITransparentUpgradeableProxy)"}},"id":42496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5828:16:52","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":42432,"src":"5799:45:52","typeDescriptions":{"typeIdentifier":"t_function_declaration_payable$_t_address_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function ITransparentUpgradeableProxy.upgradeToAndCall(address,bytes calldata) payable"}},"id":42497,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5845:8:52","memberName":"selector","nodeType":"MemberAccess","src":"5799:54:52","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"5788:65:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":42506,"nodeType":"Block","src":"5925:60:52","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":42503,"name":"_dispatchUpgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42546,"src":"5943:25:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":42504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5943:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42505,"nodeType":"ExpressionStatement","src":"5943:27:52"}]},"id":42507,"nodeType":"IfStatement","src":"5784:201:52","trueBody":{"id":42502,"nodeType":"Block","src":"5855:64:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":42499,"name":"ProxyDeniedAdminAccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42441,"src":"5880:22:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":42500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5880:24:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":42501,"nodeType":"RevertStatement","src":"5873:31:52"}]}}]}}]},"baseFunctions":[42199],"documentation":{"id":42484,"nodeType":"StructuredDocumentation","src":"5544:131:52","text":" @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior."},"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"5689:9:52","overrides":{"id":42486,"nodeType":"OverrideSpecifier","overrides":[],"src":"5718:8:52"},"parameters":{"id":42485,"nodeType":"ParameterList","parameters":[],"src":"5698:2:52"},"returnParameters":{"id":42487,"nodeType":"ParameterList","parameters":[],"src":"5727:0:52"},"scope":42547,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":42546,"nodeType":"FunctionDefinition","src":"6251:217:52","nodes":[],"body":{"id":42545,"nodeType":"Block","src":"6296:172:52","nodes":[],"statements":[{"assignments":[42522,42524],"declarations":[{"constant":false,"id":42522,"mutability":"mutable","name":"newImplementation","nameLocation":"6315:17:52","nodeType":"VariableDeclaration","scope":42545,"src":"6307:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42521,"name":"address","nodeType":"ElementaryTypeName","src":"6307:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42524,"mutability":"mutable","name":"data","nameLocation":"6347:4:52","nodeType":"VariableDeclaration","scope":42545,"src":"6334:17:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42523,"name":"bytes","nodeType":"ElementaryTypeName","src":"6334:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42537,"initialValue":{"arguments":[{"baseExpression":{"expression":{"id":42527,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6366:3:52","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":42528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6370:4:52","memberName":"data","nodeType":"MemberAccess","src":"6366:8:52","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":42530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexRangeAccess","src":"6366:12:52","startExpression":{"hexValue":"34","id":42529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6375:1:52","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}},{"components":[{"id":42532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6381:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":42531,"name":"address","nodeType":"ElementaryTypeName","src":"6381:7:52","typeDescriptions":{}}},{"id":42534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6390:5:52","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":42533,"name":"bytes","nodeType":"ElementaryTypeName","src":"6390:5:52","typeDescriptions":{}}}],"id":42535,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6380:16:52","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}],"expression":{"id":42525,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6355:3:52","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6359:6:52","memberName":"decode","nodeType":"MemberAccess","src":"6355:10:52","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":42536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6355:42:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_bytes_memory_ptr_$","typeString":"tuple(address payable,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6306:91:52"},{"expression":{"arguments":[{"id":42541,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42522,"src":"6437:17:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42542,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42524,"src":"6456:4:52","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":42538,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42172,"src":"6407:12:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$42172_$","typeString":"type(library ERC1967Utils)"}},"id":42540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6420:16:52","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":41987,"src":"6407:29:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":42543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6407:54:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42544,"nodeType":"ExpressionStatement","src":"6407:54:52"}]},"documentation":{"id":42518,"nodeType":"StructuredDocumentation","src":"6055:191:52","text":" @dev Upgrade the implementation of the proxy. See {ERC1967Utils-upgradeToAndCall}.\n Requirements:\n - If `data` is empty, `msg.value` must be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"_dispatchUpgradeToAndCall","nameLocation":"6260:25:52","parameters":{"id":42519,"nodeType":"ParameterList","parameters":[],"src":"6285:2:52"},"returnParameters":{"id":42520,"nodeType":"ParameterList","parameters":[],"src":"6296:0:52"},"scope":42547,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":42435,"name":"ERC1967Proxy","nameLocations":["4279:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":41878,"src":"4279:12:52"},"id":42436,"nodeType":"InheritanceSpecifier","src":"4279:12:52"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[42412],"contractKind":"contract","documentation":{"id":42434,"nodeType":"StructuredDocumentation","src":"952:3286:52","text":" @dev This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself.\n 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to\n the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating\n the proxy admin cannot fallback to the target implementation.\n These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a\n dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to\n call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and\n allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative\n interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership.\n NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\n inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch\n mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\n fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\n implementation.\n NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a\n meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract.\n IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an\n immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be\n overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an\n undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot\n is generally fine if the implementation is trusted.\n WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the\n compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new\n function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This\n could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency."},"fullyImplemented":true,"linearizedBaseContracts":[42547,41878,42208],"name":"TransparentUpgradeableProxy","nameLocation":"4248:27:52","scope":42548,"usedErrors":[41898,41903,41911,42441,43623,43915],"usedEvents":[41498,41505]}],"license":"MIT"},"id":52} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_logic","type":"address","internalType":"address"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidAdmin","inputs":[{"name":"admin","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"ProxyDeniedAdminAccess","inputs":[]}],"bytecode":{"object":"0x60a0604052610a97803803806100148161026b565b92833981016060828203126102675761002c82610290565b61003860208401610290565b604084015190936001600160401b03821161026757019180601f8401121561026757825161006d610068826102a4565b61026b565b9381855260208501926020838301011161026757815f926020809301855e85010152813b15610246577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561022e575f809161012d945190845af43d15610226573d9161011e610068846102a4565b9283523d5f602085013e6102bf565b505b604051906104408083016001600160401b0381118482101761021257602092849261063784396001600160a01b031681520301905ff080156102075760018060a01b0316806080525f516020610a775f395f51905f52547f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6040805160018060a01b0384168152846020820152a181156101f4576001600160a01b031916175f516020610a775f395f51905f5255604051610319908161031e82396080518160070152f35b633173bdd160e11b5f525f60045260245ffd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b6060916102bf565b505050341561012f5763b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761021257604052565b51906001600160a01b038216820361026757565b6001600160401b03811161021257601f01601f191660200190565b906102e357508051156102d457805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610314575b6102f4575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102ec56fe6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea264697066735822122021f763edfd503c6fd0b60e702d4606336df754d6e646e7f392b431d8159d1d7e64736f6c634300081c003360803460b857601f61044038819003918201601f19168301916001600160401b0383118484101760bc5780849260209460405283398101031260b857516001600160a01b0381169081900360b857801560a5575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361036f90816100d18239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f5f3560e01c8063715018a6146102765780638da5cb5b1461024f5780639623609d1461012c578063ad3cb1cc146100df5763f2fde38b14610051575f80fd5b346100dc5760203660031901126100dc576004356001600160a01b038116908190036100da5761007f610313565b80156100c65781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b505b80fd5b50346100dc57806003193601126100dc57506101286040516101026040826102cd565b60058152640352e302e360dc1b60208201526040519182916020835260208301906102ef565b0390f35b506060366003190112610237576004356001600160a01b03811690819003610237576024356001600160a01b038116908190036102375760443567ffffffffffffffff8111610237573660238201121561023757806004013567ffffffffffffffff811161023b57604051916101ac601f8301601f1916602001846102cd565b818352366024838301011161023757815f9260246020930183860137830101526101d4610313565b823b156102375761020a925f9260405180958194829363278f794360e11b845260048401526040602484015260448301906102ef565b039134905af1801561022c5761021e575080f35b61022a91505f906102cd565b005b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b34610237575f366003190112610237575f546040516001600160a01b039091168152602090f35b34610237575f3660031901126102375761028e610313565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f8019910116810190811067ffffffffffffffff82111761023b57604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b5f546001600160a01b0316330361032657565b63118cdaa760e01b5f523360045260245ffdfea264697066735822122072d964e6e89c0990604c1cd0a5da2d38a6458c147c11f636005ef4deafc0d32d64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","sourceMap":"4314:2231:45:-:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4314:2231:45;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;4314:2231:45;;;;;;;;;;;1748:29:39;;:34;1744:119;;811:66;4314:2231:45;;-1:-1:-1;;;;;;4314:2231:45;-1:-1:-1;;;;;4314:2231:45;;;;;;;;2407:36:39;-1:-1:-1;;2407:36:39;4314:2231:45;;2458:15:39;:11;;-1:-1:-1;4049:25:50;;4091:55;4049:25;;;;;;4314:2231:45;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;4314:2231:45;;;;4091:55:50;:::i;:::-;;2454:148:39;4314:2231:45;;;5290:28;;;;-1:-1:-1;;;;;5290:28:45;;;;;;;;4314:2231;5290:28;;;;;;-1:-1:-1;;;;;4314:2231:45;;;5290:28;;;-1:-1:-1;5290:28:45;;;;;4314:2231;;;;;;5273:46;;;-1:-1:-1;;;;;;;;;;;2868:66:39;3890:43;4314:2231:45;;;;;;;;;;;;;;;;;3890:43:39;3549:22;;3545:91;;-1:-1:-1;;;;;;4314:2231:45;;-1:-1:-1;;;;;;;;;;;4314:2231:45;;;;;;;;;5273:46;4314:2231;;;;;;3545:91:39;3594:31;;;-1:-1:-1;3594:31:39;-1:-1:-1;3594:31:39;4314:2231:45;;-1:-1:-1;3594:31:39;5290:28:45;4314:2231;;;-1:-1:-1;4314:2231:45;;;;;5290:28;4314:2231;;;-1:-1:-1;4314:2231:45;;;;;-1:-1:-1;4314:2231:45;;;;4091:55:50;:::i;2454:148:39:-;6163:9;;;;6159:70;2454:148;6159:70;6199:19;;;-1:-1:-1;6199:19:39;;-1:-1:-1;6199:19:39;1744:119;-1:-1:-1;;;;;1805:47:39;;;-1:-1:-1;;;;;4314:2231:45;;;;1805:47:39;4314:2231:45;;;1805:47:39;4314:2231:45;-1:-1:-1;4314:2231:45;;;;;;;;;-1:-1:-1;;4314:2231:45;;;-1:-1:-1;;;;;4314:2231:45;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;4314:2231:45;;;;;;:::o;:::-;-1:-1:-1;;;;;4314:2231:45;;;;;;-1:-1:-1;;4314:2231:45;;;;:::o;4421:582:50:-;;4593:8;;-1:-1:-1;4314:2231:45;;5674:21:50;:17;;5799:158;;;;;;5670:354;5994:19;;;5694:1;5994:19;;5694:1;5994:19;4589:408;4314:2231:45;;4841:22:50;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:50;4917:24;;;-1:-1:-1;;;;;4314:2231:45;;;;4917:24:50;4314:2231:45;;;4917:24:50;4841:49;4867:18;;;:23;4841:49;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea264697066735822122021f763edfd503c6fd0b60e702d4606336df754d6e646e7f392b431d8159d1d7e64736f6c634300081c0033","sourceMap":"4314:2231:45:-:0;;;5816:10;5600:6;-1:-1:-1;;;;;4314:2231:45;5816:27;4314:2231;;5863:7;;-1:-1:-1;;;;;;5863:7:45;-1:-1:-1;;;5863:65:45;5874:54;;5955:24;;;5863:7;5955:24;;5863:7;5955:24;5859:201;;;:::i;:::-;4314:2231;5812:306;811:66:39;;-1:-1:-1;;;;;;;;;4314:2231:45;1019:819:40;-1:-1:-1;;1019:819:40;;;;;;;-1:-1:-1;1019:819:40;;;;;;-1:-1:-1;1019:819:40;;;-1:-1:-1;1019:819:40;4314:2231:45;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4314:2231:45;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;-1:-1:-1;;4314:2231:45;;;;:::o;6326:217::-;6441:8;6450:1;4314:2231;;;;6441:8;-1:-1:-1;;4314:2231:45;;;;6450:1;4314:2231;-1:-1:-1;;;;;4314:2231:45;;;;;;;;;;;;;;;;6441:8;4314:2231;;;;;;;;6450:1;4314:2231;;;;;;;:::i;:::-;;:::i;:::-;;;;;6441:8;4314:2231;;;;;;;;;;6441:8;4314:2231;;6531:4;4314:2231;;;;;;;;;;6531:4;:::i;:::-;6326:217::o;4314:2231::-;6441:8;4314:2231;;2264:344:39;;1748:29;;:34;1744:119;;811:66;4314:2231:45;;-1:-1:-1;;;;;;4314:2231:45;-1:-1:-1;;;;;4314:2231:45;;;;;;;;2407:36:39;-1:-1:-1;;2407:36:39;4314:2231:45;;2458:15:39;:11;;2489:53;;;:::i;:::-;;2264:344::o;2454:148::-;6163:9;;;6159:70;;2264:344::o;6159:70::-;6199:19;;;1781:1;6199:19;;1781:1;6199:19;1744:119;-1:-1:-1;;;;1781:1:39;1805:47;;;-1:-1:-1;;;;;4314:2231:45;;;;1805:47:39;4314:2231:45;;;1805:47:39;3900:253:50;4049:25;3900:253;4091:55;3900:253;4049:25;;;;;;;;4314:2231:45;;;;;;;;;;:::i;:::-;;;;;4049:25:50;;4314:2231:45;;;4091:55:50;:::i;:::-;3900:253;:::o;4314:2231:45:-;;;4421:582:50;;4593:8;;-1:-1:-1;4314:2231:45;;5674:21:50;:17;;5799:158;;;;;;5670:354;5994:19;;;5694:1;5994:19;;5694:1;5994:19;4589:408;4314:2231:45;;4841:22:50;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:50;4917:24;;;-1:-1:-1;;;;;4314:2231:45;;;;4917:24:50;4314:2231:45;;;4917:24:50;4841:49;4867:18;;;:23;4841:49;","linkReferences":{},"immutableReferences":{"43111":[{"start":7,"length":32}]}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself. 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating the proxy admin cannot fallback to the target implementation. These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract. IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot is generally fine if the implementation is trusted. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"ProxyDeniedAdminAccess()\":[{\"details\":\"The proxy caller is the current admin, and can't fallback to the proxy target.\"}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0x0a8a5b994d4c4da9f61d128945cc8c9e60dcbc72bf532f72ae42a48ea90eed9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e63ae15b6b1079b9d3c73913424d4278139f9e9c9658316675b9c48d5883a50d\",\"dweb:/ipfs/QmWLxBYfp8j1YjNMabWgv75ELTaK2eEYEEGx7qsJbxVZZq\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0xeb19221d51578ea190f0b7d807c5f196db6ff4eca90fee396f45ce9669080ba0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e4ca4196dab20274d1276d902d17034065f014aeebf496f20e39e760899650b0\",\"dweb:/ipfs/QmXFoF93GmZgZHbUvSqLjBGnQ3MY429Bnvk7SvLKEUsEAN\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0x724b755843cff10a8e1503d374b857c9e7648be24e7acf1e5bee0584f1b0505c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://740ad3ba1c12e426ea32cf234f445431a13efa8dbed38b53c869237e31fc8347\",\"dweb:/ipfs/QmQ3UKUnBQn4gjxjDNGuDLQWuQqcxWzyj1HzwjFgjAJBqh\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"type":"error","name":"ERC1967InvalidAdmin"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"ProxyDeniedAdminAccess"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":"TransparentUpgradeableProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0x0a8a5b994d4c4da9f61d128945cc8c9e60dcbc72bf532f72ae42a48ea90eed9a","urls":["bzz-raw://e63ae15b6b1079b9d3c73913424d4278139f9e9c9658316675b9c48d5883a50d","dweb:/ipfs/QmWLxBYfp8j1YjNMabWgv75ELTaK2eEYEEGx7qsJbxVZZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06","urls":["bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c","dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":{"keccak256":"0xeb19221d51578ea190f0b7d807c5f196db6ff4eca90fee396f45ce9669080ba0","urls":["bzz-raw://e4ca4196dab20274d1276d902d17034065f014aeebf496f20e39e760899650b0","dweb:/ipfs/QmXFoF93GmZgZHbUvSqLjBGnQ3MY429Bnvk7SvLKEUsEAN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"keccak256":"0x724b755843cff10a8e1503d374b857c9e7648be24e7acf1e5bee0584f1b0505c","urls":["bzz-raw://740ad3ba1c12e426ea32cf234f445431a13efa8dbed38b53c869237e31fc8347","dweb:/ipfs/QmQ3UKUnBQn4gjxjDNGuDLQWuQqcxWzyj1HzwjFgjAJBqh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5","urls":["bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23","dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","id":43221,"exportedSymbols":{"ERC1967Proxy":[42550],"ERC1967Utils":[42844],"IERC1967":[42187],"ITransparentUpgradeableProxy":[43106],"ProxyAdmin":[43084],"TransparentUpgradeableProxy":[43220]},"nodeType":"SourceUnit","src":"133:6413:45","nodes":[{"id":43086,"nodeType":"PragmaDirective","src":"133:24:45","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":43088,"nodeType":"ImportDirective","src":"159:57:45","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"../ERC1967/ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":43221,"sourceUnit":42845,"symbolAliases":[{"foreign":{"id":43087,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42844,"src":"167:12:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":43090,"nodeType":"ImportDirective","src":"217:57:45","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","file":"../ERC1967/ERC1967Proxy.sol","nameLocation":"-1:-1:-1","scope":43221,"sourceUnit":42551,"symbolAliases":[{"foreign":{"id":43089,"name":"ERC1967Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42550,"src":"225:12:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":43092,"nodeType":"ImportDirective","src":"275:55:45","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","file":"../../interfaces/IERC1967.sol","nameLocation":"-1:-1:-1","scope":43221,"sourceUnit":42188,"symbolAliases":[{"foreign":{"id":43091,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42187,"src":"283:8:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":43094,"nodeType":"ImportDirective","src":"331:44:45","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","file":"./ProxyAdmin.sol","nameLocation":"-1:-1:-1","scope":43221,"sourceUnit":43085,"symbolAliases":[{"foreign":{"id":43093,"name":"ProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43084,"src":"339:10:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":43106,"nodeType":"ContractDefinition","src":"823:202:45","nodes":[{"id":43105,"nodeType":"FunctionDefinition","src":"932:91:45","nodes":[],"documentation":{"id":43098,"nodeType":"StructuredDocumentation","src":"880:47:45","text":"@dev See {UUPSUpgradeable-upgradeToAndCall}"},"functionSelector":"4f1ef286","implemented":false,"kind":"function","modifiers":[],"name":"upgradeToAndCall","nameLocation":"941:16:45","parameters":{"id":43103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43100,"mutability":"mutable","name":"newImplementation","nameLocation":"966:17:45","nodeType":"VariableDeclaration","scope":43105,"src":"958:25:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43099,"name":"address","nodeType":"ElementaryTypeName","src":"958:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43102,"mutability":"mutable","name":"data","nameLocation":"1000:4:45","nodeType":"VariableDeclaration","scope":43105,"src":"985:19:45","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":43101,"name":"bytes","nodeType":"ElementaryTypeName","src":"985:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"957:48:45"},"returnParameters":{"id":43104,"nodeType":"ParameterList","parameters":[],"src":"1022:0:45"},"scope":43106,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":43096,"name":"IERC1967","nameLocations":["865:8:45"],"nodeType":"IdentifierPath","referencedDeclaration":42187,"src":"865:8:45"},"id":43097,"nodeType":"InheritanceSpecifier","src":"865:8:45"}],"canonicalName":"ITransparentUpgradeableProxy","contractDependencies":[],"contractKind":"interface","documentation":{"id":43095,"nodeType":"StructuredDocumentation","src":"377:445:45","text":" @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\n does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch\n mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\n include them in the ABI so this interface must be used to interact with it."},"fullyImplemented":false,"linearizedBaseContracts":[43106,42187],"name":"ITransparentUpgradeableProxy","nameLocation":"833:28:45","scope":43221,"usedErrors":[],"usedEvents":[42174,42181,42186]},{"id":43220,"nodeType":"ContractDefinition","src":"4314:2231:45","nodes":[{"id":43111,"nodeType":"VariableDeclaration","src":"4708:32:45","nodes":[],"constant":false,"mutability":"immutable","name":"_admin","nameLocation":"4734:6:45","scope":43220,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43110,"name":"address","nodeType":"ElementaryTypeName","src":"4708:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"id":43114,"nodeType":"ErrorDefinition","src":"4854:31:45","nodes":[],"documentation":{"id":43112,"nodeType":"StructuredDocumentation","src":"4747:102:45","text":" @dev The proxy caller is the current admin, and can't fallback to the proxy target."},"errorSelector":"d2b576ec","name":"ProxyDeniedAdminAccess","nameLocation":"4860:22:45","parameters":{"id":43113,"nodeType":"ParameterList","parameters":[],"src":"4882:2:45"}},{"id":43147,"nodeType":"FunctionDefinition","src":"5157:296:45","nodes":[],"body":{"id":43146,"nodeType":"Block","src":"5263:190:45","nodes":[],"statements":[{"expression":{"id":43137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43128,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43111,"src":"5273:6:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":43134,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43119,"src":"5305:12:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":43133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"5290:14:45","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_ProxyAdmin_$43084_$","typeString":"function (address) returns (contract ProxyAdmin)"},"typeName":{"id":43132,"nodeType":"UserDefinedTypeName","pathNode":{"id":43131,"name":"ProxyAdmin","nameLocations":["5294:10:45"],"nodeType":"IdentifierPath","referencedDeclaration":43084,"src":"5294:10:45"},"referencedDeclaration":43084,"src":"5294:10:45","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$43084","typeString":"contract ProxyAdmin"}}},"id":43135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5290:28:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$43084","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$43084","typeString":"contract ProxyAdmin"}],"id":43130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5282:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":43129,"name":"address","nodeType":"ElementaryTypeName","src":"5282:7:45","typeDescriptions":{}}},"id":43136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5282:37:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5273:46:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":43138,"nodeType":"ExpressionStatement","src":"5273:46:45"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":43142,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43156,"src":"5432:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":43143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5432:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":43139,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42844,"src":"5407:12:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$42844_$","typeString":"type(library ERC1967Utils)"}},"id":43141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5420:11:45","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":42726,"src":"5407:24:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":43144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5407:39:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43145,"nodeType":"ExpressionStatement","src":"5407:39:45"}]},"documentation":{"id":43115,"nodeType":"StructuredDocumentation","src":"4891:261:45","text":" @dev Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`,\n backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in\n {ERC1967Proxy-constructor}."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":43124,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43117,"src":"5248:6:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":43125,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43121,"src":"5256:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":43126,"kind":"baseConstructorSpecifier","modifierName":{"id":43123,"name":"ERC1967Proxy","nameLocations":["5235:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":42550,"src":"5235:12:45"},"nodeType":"ModifierInvocation","src":"5235:27:45"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":43122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43117,"mutability":"mutable","name":"_logic","nameLocation":"5177:6:45","nodeType":"VariableDeclaration","scope":43147,"src":"5169:14:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43116,"name":"address","nodeType":"ElementaryTypeName","src":"5169:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43119,"mutability":"mutable","name":"initialOwner","nameLocation":"5193:12:45","nodeType":"VariableDeclaration","scope":43147,"src":"5185:20:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43118,"name":"address","nodeType":"ElementaryTypeName","src":"5185:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43121,"mutability":"mutable","name":"_data","nameLocation":"5220:5:45","nodeType":"VariableDeclaration","scope":43147,"src":"5207:18:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43120,"name":"bytes","nodeType":"ElementaryTypeName","src":"5207:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5168:58:45"},"returnParameters":{"id":43127,"nodeType":"ParameterList","parameters":[],"src":"5263:0:45"},"scope":43220,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":43156,"nodeType":"FunctionDefinition","src":"5520:93:45","nodes":[],"body":{"id":43155,"nodeType":"Block","src":"5583:30:45","nodes":[],"statements":[{"expression":{"id":43153,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43111,"src":"5600:6:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":43152,"id":43154,"nodeType":"Return","src":"5593:13:45"}]},"documentation":{"id":43148,"nodeType":"StructuredDocumentation","src":"5459:56:45","text":" @dev Returns the admin of this proxy."},"implemented":true,"kind":"function","modifiers":[],"name":"_proxyAdmin","nameLocation":"5529:11:45","parameters":{"id":43149,"nodeType":"ParameterList","parameters":[],"src":"5540:2:45"},"returnParameters":{"id":43152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43156,"src":"5574:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43150,"name":"address","nodeType":"ElementaryTypeName","src":"5574:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5573:9:45"},"scope":43220,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":43190,"nodeType":"FunctionDefinition","src":"5755:369:45","nodes":[],"body":{"id":43189,"nodeType":"Block","src":"5802:322:45","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":43165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43161,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5816:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5820:6:45","memberName":"sender","nodeType":"MemberAccess","src":"5816:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":43163,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43156,"src":"5830:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":43164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5830:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5816:27:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43187,"nodeType":"Block","src":"6076:42:45","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":43182,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6090:5:45","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$43220_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":43184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6096:9:45","memberName":"_fallback","nodeType":"MemberAccess","referencedDeclaration":42871,"src":"6090:15:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":43185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6090:17:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43186,"nodeType":"ExpressionStatement","src":"6090:17:45"}]},"id":43188,"nodeType":"IfStatement","src":"5812:306:45","trueBody":{"id":43181,"nodeType":"Block","src":"5845:225:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":43171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43166,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5863:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5867:3:45","memberName":"sig","nodeType":"MemberAccess","src":"5863:7:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":43168,"name":"ITransparentUpgradeableProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43106,"src":"5874:28:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ITransparentUpgradeableProxy_$43106_$","typeString":"type(contract ITransparentUpgradeableProxy)"}},"id":43169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5903:16:45","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":43105,"src":"5874:45:45","typeDescriptions":{"typeIdentifier":"t_function_declaration_payable$_t_address_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function ITransparentUpgradeableProxy.upgradeToAndCall(address,bytes calldata) payable"}},"id":43170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5920:8:45","memberName":"selector","nodeType":"MemberAccess","src":"5874:54:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"5863:65:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43179,"nodeType":"Block","src":"6000:60:45","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":43176,"name":"_dispatchUpgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43219,"src":"6018:25:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":43177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6018:27:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43178,"nodeType":"ExpressionStatement","src":"6018:27:45"}]},"id":43180,"nodeType":"IfStatement","src":"5859:201:45","trueBody":{"id":43175,"nodeType":"Block","src":"5930:64:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":43172,"name":"ProxyDeniedAdminAccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43114,"src":"5955:22:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":43173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5955:24:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43174,"nodeType":"RevertStatement","src":"5948:31:45"}]}}]}}]},"baseFunctions":[42871],"documentation":{"id":43157,"nodeType":"StructuredDocumentation","src":"5619:131:45","text":" @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior."},"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"5764:9:45","overrides":{"id":43159,"nodeType":"OverrideSpecifier","overrides":[],"src":"5793:8:45"},"parameters":{"id":43158,"nodeType":"ParameterList","parameters":[],"src":"5773:2:45"},"returnParameters":{"id":43160,"nodeType":"ParameterList","parameters":[],"src":"5802:0:45"},"scope":43220,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":43219,"nodeType":"FunctionDefinition","src":"6326:217:45","nodes":[],"body":{"id":43218,"nodeType":"Block","src":"6371:172:45","nodes":[],"statements":[{"assignments":[43195,43197],"declarations":[{"constant":false,"id":43195,"mutability":"mutable","name":"newImplementation","nameLocation":"6390:17:45","nodeType":"VariableDeclaration","scope":43218,"src":"6382:25:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43194,"name":"address","nodeType":"ElementaryTypeName","src":"6382:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43197,"mutability":"mutable","name":"data","nameLocation":"6422:4:45","nodeType":"VariableDeclaration","scope":43218,"src":"6409:17:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43196,"name":"bytes","nodeType":"ElementaryTypeName","src":"6409:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43210,"initialValue":{"arguments":[{"baseExpression":{"expression":{"id":43200,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6441:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6445:4:45","memberName":"data","nodeType":"MemberAccess","src":"6441:8:45","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":43203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexRangeAccess","src":"6441:12:45","startExpression":{"hexValue":"34","id":43202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6450:1:45","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}},{"components":[{"id":43205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6456:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":43204,"name":"address","nodeType":"ElementaryTypeName","src":"6456:7:45","typeDescriptions":{}}},{"id":43207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6465:5:45","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":43206,"name":"bytes","nodeType":"ElementaryTypeName","src":"6465:5:45","typeDescriptions":{}}}],"id":43208,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6455:16:45","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}],"expression":{"id":43198,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6430:3:45","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":43199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6434:6:45","memberName":"decode","nodeType":"MemberAccess","src":"6430:10:45","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":43209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6430:42:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_bytes_memory_ptr_$","typeString":"tuple(address payable,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6381:91:45"},{"expression":{"arguments":[{"id":43214,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43195,"src":"6512:17:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":43215,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43197,"src":"6531:4:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43211,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42844,"src":"6482:12:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$42844_$","typeString":"type(library ERC1967Utils)"}},"id":43213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6495:16:45","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":42659,"src":"6482:29:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":43216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6482:54:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43217,"nodeType":"ExpressionStatement","src":"6482:54:45"}]},"documentation":{"id":43191,"nodeType":"StructuredDocumentation","src":"6130:191:45","text":" @dev Upgrade the implementation of the proxy. See {ERC1967Utils-upgradeToAndCall}.\n Requirements:\n - If `data` is empty, `msg.value` must be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"_dispatchUpgradeToAndCall","nameLocation":"6335:25:45","parameters":{"id":43192,"nodeType":"ParameterList","parameters":[],"src":"6360:2:45"},"returnParameters":{"id":43193,"nodeType":"ParameterList","parameters":[],"src":"6371:0:45"},"scope":43220,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":43108,"name":"ERC1967Proxy","nameLocations":["4354:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":42550,"src":"4354:12:45"},"id":43109,"nodeType":"InheritanceSpecifier","src":"4354:12:45"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[43084],"contractKind":"contract","documentation":{"id":43107,"nodeType":"StructuredDocumentation","src":"1027:3286:45","text":" @dev This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself.\n 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to\n the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating\n the proxy admin cannot fallback to the target implementation.\n These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a\n dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to\n call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and\n allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative\n interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership.\n NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\n inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch\n mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\n fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\n implementation.\n NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a\n meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract.\n IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an\n immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be\n overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an\n undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot\n is generally fine if the implementation is trusted.\n WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the\n compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new\n function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This\n could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency."},"fullyImplemented":true,"linearizedBaseContracts":[43220,42550,42880],"name":"TransparentUpgradeableProxy","nameLocation":"4323:27:45","scope":43221,"usedErrors":[42570,42575,42583,43114,43885,44177],"usedEvents":[42174,42181]}],"license":"MIT"},"id":45} \ No newline at end of file diff --git a/ethexe/ethereum/WrappedVara.json b/ethexe/ethereum/WrappedVara.json index 33ab1ab1c31..3596c6ec57b 100644 --- a/ethexe/ethereum/WrappedVara.json +++ b/ethexe/ethereum/WrappedVara.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051611cbe90816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f80516020611c69833981519152549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f80516020611c698339815191525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f80516020611b898339815191525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f80516020611b89833981519152555b825167ffffffffffffffff81116107a8576104495f80516020611be98339815191525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f80516020611be9833981519152555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f80516020611bc98339815191525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f80516020611bc9833981519152555b825167ffffffffffffffff81116107a8576105985f80516020611c498339815191525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f80516020611c49833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f80516020611c6983398151915254165f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c498339815191525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f80516020611c49833981519152556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f80516020611c498339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bc98339815191525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f80516020611bc983398151915255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f80516020611bc98339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f80516020611be98339815191525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f80516020611be98339815191525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f80516020611be98339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f80516020611b898339815191525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f80516020611b8983398151915255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f80516020611b898339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f80516020611c698339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611be983398151915254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f80516020611be98339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f80516020611c09833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f80516020611bc983398151915254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f80516020611c4983398151915254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f80516020611c0983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f80516020611ba9833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f80516020611c698339815191525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f80516020611c2983398151915254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f80516020611b89833981519152546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f80516020611b898339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f80516020611c0983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f80516020611ba983398151915260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611ba983398151915284520360405f2055845f525f80516020611ba9833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c09833981519152546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f80516020611ba983398151915260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611ba98339815191528452036040862055805f80516020611c2983398151915254035f80516020611c2983398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f80516020611c2983398151915254908282018092116117ac575f80516020611c29833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f80516020611c2983398151915254035f80516020611c29833981519152555b604051908152a3565b8484525f80516020611ba9833981519152825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f80516020611c698339815191525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bc983398151915254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f80516020611c4983398151915254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220876fa3b8d0ec6917757682c3a8181195f1246da17e840283e4106a851ed888ff64736f6c634300081a0033","sourceMap":"632:990:160:-:0;;;;;;;8837:64:26;632:990:160;;;;;;7896:76:26;;-1:-1:-1;;;;;;;;;;;632:990:160;;7985:34:26;7981:146;;-1:-1:-1;632:990:160;;;;;;;;;7981:146:26;-1:-1:-1;;;;;;632:990:160;-1:-1:-1;;;;;632:990:160;;;8837:64:26;632:990:160;;;8087:29:26;;632:990:160;;8087:29:26;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:26;;-1:-1:-1;7938:23:26;632:990:160;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f80516020611c69833981519152549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f80516020611c698339815191525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f80516020611b898339815191525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f80516020611b89833981519152555b825167ffffffffffffffff81116107a8576104495f80516020611be98339815191525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f80516020611be9833981519152555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f80516020611bc98339815191525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f80516020611bc9833981519152555b825167ffffffffffffffff81116107a8576105985f80516020611c498339815191525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f80516020611c49833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f80516020611c6983398151915254165f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c498339815191525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f80516020611c49833981519152556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f80516020611c498339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bc98339815191525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f80516020611bc983398151915255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f80516020611bc98339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f80516020611be98339815191525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f80516020611be98339815191525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f80516020611be98339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f80516020611b898339815191525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f80516020611b8983398151915255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f80516020611b898339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f80516020611c698339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611be983398151915254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f80516020611be98339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f80516020611c09833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f80516020611bc983398151915254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f80516020611c4983398151915254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f80516020611c0983398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f80516020611ba9833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f80516020611c698339815191525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f80516020611c69833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f80516020611c2983398151915254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f80516020611b89833981519152546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f80516020611b898339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f80516020611c0983398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f80516020611ba983398151915260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611ba983398151915284520360405f2055845f525f80516020611ba9833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c09833981519152546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f80516020611ba983398151915260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611ba98339815191528452036040862055805f80516020611c2983398151915254035f80516020611c2983398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f80516020611c2983398151915254908282018092116117ac575f80516020611c29833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f80516020611c2983398151915254035f80516020611c29833981519152555b604051908152a3565b8484525f80516020611ba9833981519152825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f80516020611c698339815191525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bc983398151915254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bc98339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f80516020611c4983398151915254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f80516020611c498339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220876fa3b8d0ec6917757682c3a8181195f1246da17e840283e4106a851ed888ff64736f6c634300081a0033","sourceMap":"632:990:160:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2357:1:25;632:990:160;;:::i;:::-;2303:62:25;;:::i;:::-;2357:1;:::i;:::-;632:990:160;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;4867:20:27;632:990:160;;:::i;:::-;4867:20:27;;:::i;:::-;:29;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2301:15:29;;:26;2297:97;;6967:25:66;7021:8;632:990:160;;;;;;;;;;;;972:64:31;632:990:160;;;;;;;;;;;;;;;;2435:78:29;632:990:160;2435:78:29;;632:990:160;1279:95:29;632:990:160;;1279:95:29;632:990:160;1279:95:29;;632:990:160;;;;;;;;;1279:95:29;;632:990:160;1279:95:29;632:990:160;1279:95:29;;632:990:160;;1279:95:29;;632:990:160;;1279:95:29;;632:990:160;;2435:78:29;;;632:990:160;2435:78:29;;:::i;:::-;632:990:160;2425:89:29;;4094:23:33;;:::i;:::-;3515:233:68;632:990:160;3515:233:68;;-1:-1:-1;;;3515:233:68;;;;;;;;;;632:990:160;;;3515:233:68;632:990:160;;3515:233:68;;6967:25:66;:::i;:::-;7021:8;;;;;:::i;:::-;-1:-1:-1;;;;;632:990:160;2638:15:29;;;2634:88;;10117:4:27;;;;;:::i;2634:88:29:-;2676:35;;;;;632:990:160;2676:35:29;632:990:160;;;;;;2676:35:29;2297:97;2350:33;;;;632:990:160;2350:33:29;632:990:160;;;;2350:33:29;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;4301:16:26;632:990:160;;;;4726:16:26;;:34;;;;632:990:160;4805:1:26;4790:16;:50;;;;632:990:160;4855:13:26;:30;;;;632:990:160;4851:91:26;;;-1:-1:-1;;632:990:160;;4805:1:26;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;4979:67:26;;632:990:160;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:160;;;;;;;;;;;:::i;:::-;821:14;632:990;;-1:-1:-1;;;632:990:160;821:14;;;6893:76:26;;:::i;:::-;;;:::i;:::-;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;6893:76:26;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6961:1;;;:::i;:::-;632:990:160;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:160;;;;6893:76:26;;:::i;:::-;632:990:160;;;;;;;:::i;:::-;4805:1:26;632:990:160;;-1:-1:-1;;;632:990:160;;;;6893:76:26;;:::i;:::-;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;2600:7:27;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;2806:64:33;632:990:160;;;3902:16:33;632:990:160;-1:-1:-1;;;;;632:990:160;;8803:21:27;8799:91;;941:9:160;8928:5:27;;;:::i;:::-;5066:101:26;;632:990:160;5066:101:26;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;5142:14:26;632:990:160;;;4805:1:26;632:990:160;;5142:14:26;632:990:160;8799:91:27;8847:32;;;632:990:160;8847:32:27;632:990:160;;;;;8847:32:27;632:990:160;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;2600:7:27;632:990:160;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:26;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;4979:67:26;-1:-1:-1;;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;4979:67:26;;;4851:91;6498:23;;;632:990:160;4908:23:26;632:990:160;;4908:23:26;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:26;;4726:34;;;-1:-1:-1;4726:34:26;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;4616:5:27;632:990:160;;:::i;:::-;;;966:10:30;;4616:5:27;:::i;:::-;632:990:160;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;;632:990:160;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;-1:-1:-1;;;;;632:990:160;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2806:64:33;632:990:160;5777:18:33;:43;;;632:990:160;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5965:13:33;632:990:160;;;;6000:4:33;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;632:990:160;;;;;;;;;;;;-1:-1:-1;;;632:990:160;;;;;;;5777:43:33;632:990:160;5799:16:33;632:990:160;5799:21:33;5777:43;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;;;;;;;;;972:64:31;632:990:160;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;1479:5:28;632:990:160;;:::i;:::-;;;966:10:30;1448:5:28;966:10:30;;1448:5:28;;:::i;:::-;1479;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;632:990:160;;;;;;;-1:-1:-1;;;;;632:990:160;3975:40:25;632:990:160;;3975:40:25;632:990:160;;;;;;;-1:-1:-1;;632:990:160;;;;-1:-1:-1;;;;;632:990:160;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;6431:44:26;;;;632:990:160;6427:105:26;;1427:1:160;632:990;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;6656:20:26;632:990:160;;;1427:1;632:990;;6656:20:26;632:990:160;6431:44:26;632:990:160;1427:1;632:990;;;6450:25:26;;6431:44;;632:990:160;;;;;;-1:-1:-1;;632:990:160;;;;1005:5:28;632:990:160;;966:10:30;1005:5:28;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;;:::i;:::-;2303:62:25;;:::i;:::-;-1:-1:-1;;;;;632:990:160;;8803:21:27;8799:91;;8928:5;632:990:160;;;8928:5:27;;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;4094:23:33;;:::i;:::-;632:990:160;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;;;;1512:2;632:990;;;;;;;;;-1:-1:-1;;632:990:160;;;;6198:5:27;632:990:160;;:::i;:::-;;;:::i;:::-;;;966:10:30;6162:5:27;966:10:30;;6162:5:27;;:::i;:::-;6198;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;;10117:4:27;632:990:160;;:::i;:::-;;;966:10:30;;10117:4:27;:::i;632:990:160:-;;;;;;-1:-1:-1;;632:990:160;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;;;;-1:-1:-1;632:990:160;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:160;;;;;;;;-1:-1:-1;;632:990:160;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:160;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:160;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;632:990:160;;;;;4867:13:27;632:990:160;;;;;;:::o;3405:215:25:-;-1:-1:-1;;;;;632:990:160;3489:22:25;;3485:91;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;632:990:160;;;;;;;-1:-1:-1;;;;;632:990:160;3975:40:25;-1:-1:-1;;3975:40:25;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;632:990:160;;3509:1:25;3534:31;11745:477:27;;;4867:20;;;:::i;:::-;632:990:160;;;;;;;-1:-1:-1;632:990:160;;;;-1:-1:-1;632:990:160;;;;;11910:37:27;;11906:310;;11745:477;;;;;:::o;11906:310::-;11967:24;;;11963:130;;-1:-1:-1;;;;;632:990:160;;11141:19:27;11137:89;;-1:-1:-1;;;;;632:990:160;;11239:21:27;11235:90;;11334:20;;;:::i;:::-;:29;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;-1:-1:-1;632:990:160;;;;;11906:310:27;;;;;;11235:90;11283:31;;;-1:-1:-1;11283:31:27;-1:-1:-1;11283:31:27;632:990:160;;-1:-1:-1;11283:31:27;11137:89;11183:32;;;-1:-1:-1;11183:32:27;-1:-1:-1;11183:32:27;632:990:160;;-1:-1:-1;11183:32:27;11963:130;12018:60;;;;;;-1:-1:-1;12018:60:27;632:990:160;;;;;;12018:60:27;632:990:160;;;;;;-1:-1:-1;12018:60:27;6605:300;-1:-1:-1;;;;;632:990:160;;6688:18:27;;6684:86;;-1:-1:-1;;;;;632:990:160;;6783:16:27;;6779:86;;632:990:160;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;6704:1:27;632:990:160;;7609:19:27;;;7605:115;;632:990:160;8358:25:27;632:990:160;;;;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;;6704:1:27;632:990:160;;;6704:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;6704:1:27;632:990:160;;;;;;;;;;;;8358:25:27;6605:300::o;7605:115::-;7655:50;;;;6704:1;7655:50;;632:990:160;;;;;;6704:1:27;7655:50;6684:86;6729:30;;;6704:1;6729:30;6704:1;6729:30;632:990:160;;6704:1:27;6729:30;2658:162:25;-1:-1:-1;;;;;;;;;;;632:990:160;-1:-1:-1;;;;;632:990:160;966:10:30;2717:23:25;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:25;966:10:30;2763:40:25;632:990:160;;-1:-1:-1;2763:40:25;9259:206:27;;;;-1:-1:-1;;;;;632:990:160;9329:21:27;;9325:89;;632:990:160;9348:1:27;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;9348:1:27;632:990:160;;7609:19:27;;;7605:115;;632:990:160;;9348:1:27;632:990:160;;8358:25:27;632:990:160;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;8358:25:27;9259:206::o;7605:115::-;7655:50;;;;;9348:1;7655:50;;632:990:160;;;;;;9348:1:27;7655:50;10976:487;;-1:-1:-1;;;;;632:990:160;;;11141:19:27;;11137:89;;-1:-1:-1;;;;;632:990:160;;11239:21:27;;11235:90;;11415:31;11334:20;;632:990:160;11334:20:27;;:::i;:::-;632:990:160;-1:-1:-1;632:990:160;;;;;-1:-1:-1;632:990:160;;;;;;;11415:31:27;10976:487::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;-1:-1:-1;;;;;632:990:160;;;;8358:25:27;;632:990:160;;7918:16:27;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;7914:429:27;632:990:160;;;;;8358:25:27;7220:1170::o;7914:429::-;632:990:160;;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;;;;;7914:429:27;;632:990:160;;;;;941:9;;;;;632:990;941:9;4130:191:33;4243:17;;:::i;:::-;4262:20;;:::i;:::-;632:990:160;;4221:92:33;;;;632:990:160;2073:95:33;632:990:160;;;2073:95:33;;632:990:160;2073:95:33;;;632:990:160;4284:13:33;2073:95;;;632:990:160;4307:4:33;2073:95;;;632:990:160;2073:95:33;4221:92;;;;;;:::i;:::-;632:990:160;4211:103:33;;4130:191;:::o;7084:141:26:-;632:990:160;-1:-1:-1;;;;;;;;;;;632:990:160;;;;7150:18:26;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:26;;-1:-1:-1;7191:17:26;5140:1530:66;;;6199:66;6186:79;;6182:164;;632:990:160;;;;;;-1:-1:-1;632:990:160;;;;;;;;;;;;;;;;;;;6457:24:66;;;;;;;;;-1:-1:-1;6457:24:66;-1:-1:-1;;;;;632:990:160;;6495:20:66;6491:113;;6614:49;-1:-1:-1;6614:49:66;-1:-1:-1;5140:1530:66;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:66;6457:24;6531:62;-1:-1:-1;6531:62:66;:::o;6457:24::-;632:990:160;;;-1:-1:-1;632:990:160;;;;;6182:164:66;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o;7196:532::-;632:990:160;;;;;;7282:29:66;;;7327:7;;:::o;7278:444::-;632:990:160;7378:38:66;;632:990:160;;7439:23:66;;;7291:20;7439:23;632:990:160;7291:20:66;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;632:990:160;;;7291:20:66;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;632:990:160;;;7291:20:66;7679:32;632:990:160;;;;7291:20:66;632:990:160;;;;;7291:20:66;632:990:160;7058:687:33;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7230:22:33;;;;7275;7268:29;:::o;7226:513::-;-1:-1:-1;;2806:64:33;632:990:160;7603:15:33;;;;7638:17;:::o;7599:130::-;7694:20;7701:13;7694:20;:::o;632:990:160:-;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;-1:-1:-1;632:990:160;;;;;;;;;;;-1:-1:-1;632:990:160;;7966:723:33;632:990:160;;-1:-1:-1;;;;;;;;;;;632:990:160;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;8147:25:33;;;;8195;8188:32;:::o;8143:540::-;-1:-1:-1;;8507:16:33;632:990:160;8541:18:33;;;;8579:20;:::o;632:990:160:-;-1:-1:-1;;;;;;;;;;;;632:990:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:160;;;-1:-1:-1;632:990:160;;;;;;;;;;;-1:-1:-1;632:990:160;","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883\",\"dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e\",\"dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155\",\"dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd\",\"dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718\",\"dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72","urls":["bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152","dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506","urls":["bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883","dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf","urls":["bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e","dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229","urls":["bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155","dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1","urls":["bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd","dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd","urls":["bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718","dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":76935,"exportedSymbols":{"ERC20BurnableUpgradeable":[40320],"ERC20PermitUpgradeable":[40489],"ERC20Upgradeable":[40258],"Initializable":[39641],"OwnableUpgradeable":[39387],"WrappedVara":[76934]},"nodeType":"SourceUnit","src":"39:1584:160","nodes":[{"id":76829,"nodeType":"PragmaDirective","src":"39:24:160","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":76831,"nodeType":"ImportDirective","src":"65:96:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":39642,"symbolAliases":[{"foreign":{"id":76830,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39641,"src":"73:13:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76833,"nodeType":"ImportDirective","src":"162:102:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":40259,"symbolAliases":[{"foreign":{"id":76832,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40258,"src":"170:16:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76835,"nodeType":"ImportDirective","src":"265:133:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":40321,"symbolAliases":[{"foreign":{"id":76834,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40320,"src":"273:24:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76837,"nodeType":"ImportDirective","src":"399:101:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":39388,"symbolAliases":[{"foreign":{"id":76836,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39387,"src":"407:18:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76839,"nodeType":"ImportDirective","src":"501:129:160","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":76935,"sourceUnit":40490,"symbolAliases":[{"foreign":{"id":76838,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40489,"src":"509:22:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":76934,"nodeType":"ContractDefinition","src":"632:990:160","nodes":[{"id":76852,"nodeType":"VariableDeclaration","src":"784:51:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"808:10:160","scope":76934,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76850,"name":"string","nodeType":"ElementaryTypeName","src":"784:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":76851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"821:14:160","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":76855,"nodeType":"VariableDeclaration","src":"841:46:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"865:12:160","scope":76934,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":76853,"name":"string","nodeType":"ElementaryTypeName","src":"841:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":76854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"880:7:160","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":76858,"nodeType":"VariableDeclaration","src":"893:57:160","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"918:20:160","scope":76934,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76856,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":76857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"941:9:160","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":76866,"nodeType":"FunctionDefinition","src":"1010:53:160","nodes":[],"body":{"id":76865,"nodeType":"Block","src":"1024:39:160","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76862,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39609,"src":"1034:20:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1034:22:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76864,"nodeType":"ExpressionStatement","src":"1034:22:160"}]},"documentation":{"id":76859,"nodeType":"StructuredDocumentation","src":"957:48:160","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":76860,"nodeType":"ParameterList","parameters":[],"src":"1021:2:160"},"returnParameters":{"id":76861,"nodeType":"ParameterList","parameters":[],"src":"1024:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76900,"nodeType":"FunctionDefinition","src":"1069:297:160","nodes":[],"body":{"id":76899,"nodeType":"Block","src":"1130:236:160","nodes":[],"statements":[{"expression":{"arguments":[{"id":76874,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76852,"src":"1153:10:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":76875,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76855,"src":"1165:12:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76873,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39709,"src":"1140:12:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":76876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1140:38:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76877,"nodeType":"ExpressionStatement","src":"1140:38:160"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":76878,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40279,"src":"1188:20:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":76879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1188:22:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76880,"nodeType":"ExpressionStatement","src":"1188:22:160"},{"expression":{"arguments":[{"id":76882,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76868,"src":"1235:12:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76881,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39247,"src":"1220:14:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":76883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:28:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76884,"nodeType":"ExpressionStatement","src":"1220:28:160"},{"expression":{"arguments":[{"id":76886,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76852,"src":"1277:10:160","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":76885,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40376,"src":"1258:18:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":76887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1258:30:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76888,"nodeType":"ExpressionStatement","src":"1258:30:160"},{"expression":{"arguments":[{"id":76890,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76868,"src":"1305:12:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":76891,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76858,"src":"1319:20:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":76895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":76892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1342:2:160","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":76893,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[76918],"referencedDeclaration":76918,"src":"1348:8:160","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":76894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1348:10:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1342:16:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1319:39:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76889,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40090,"src":"1299:5:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":76897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1299:60:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76898,"nodeType":"ExpressionStatement","src":"1299:60:160"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":76871,"kind":"modifierInvocation","modifierName":{"id":76870,"name":"initializer","nameLocations":["1118:11:160"],"nodeType":"IdentifierPath","referencedDeclaration":39495,"src":"1118:11:160"},"nodeType":"ModifierInvocation","src":"1118:11:160"}],"name":"initialize","nameLocation":"1078:10:160","parameters":{"id":76869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76868,"mutability":"mutable","name":"initialOwner","nameLocation":"1097:12:160","nodeType":"VariableDeclaration","scope":76900,"src":"1089:20:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76867,"name":"address","nodeType":"ElementaryTypeName","src":"1089:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1088:22:160"},"returnParameters":{"id":76872,"nodeType":"ParameterList","parameters":[],"src":"1130:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76909,"nodeType":"FunctionDefinition","src":"1372:60:160","nodes":[],"body":{"id":76908,"nodeType":"Block","src":"1430:2:160","nodes":[],"statements":[]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":76903,"kind":"modifierInvocation","modifierName":{"id":76902,"name":"onlyOwner","nameLocations":["1403:9:160"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1403:9:160"},"nodeType":"ModifierInvocation","src":"1403:9:160"},{"arguments":[{"hexValue":"32","id":76905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:1:160","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":76906,"kind":"modifierInvocation","modifierName":{"id":76904,"name":"reinitializer","nameLocations":["1413:13:160"],"nodeType":"IdentifierPath","referencedDeclaration":39542,"src":"1413:13:160"},"nodeType":"ModifierInvocation","src":"1413:16:160"}],"name":"reinitialize","nameLocation":"1381:12:160","parameters":{"id":76901,"nodeType":"ParameterList","parameters":[],"src":"1393:2:160"},"returnParameters":{"id":76907,"nodeType":"ParameterList","parameters":[],"src":"1430:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76918,"nodeType":"FunctionDefinition","src":"1438:83:160","nodes":[],"body":{"id":76917,"nodeType":"Block","src":"1495:26:160","nodes":[],"statements":[{"expression":{"hexValue":"3132","id":76915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1512:2:160","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":76914,"id":76916,"nodeType":"Return","src":"1505:9:160"}]},"baseFunctions":[39778],"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1447:8:160","overrides":{"id":76911,"nodeType":"OverrideSpecifier","overrides":[],"src":"1470:8:160"},"parameters":{"id":76910,"nodeType":"ParameterList","parameters":[],"src":"1455:2:160"},"returnParameters":{"id":76914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76918,"src":"1488:5:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":76912,"name":"uint8","nodeType":"ElementaryTypeName","src":"1488:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1487:7:160"},"scope":76934,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":76933,"nodeType":"FunctionDefinition","src":"1527:93:160","nodes":[],"body":{"id":76932,"nodeType":"Block","src":"1586:34:160","nodes":[],"statements":[{"expression":{"arguments":[{"id":76928,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76920,"src":"1602:2:160","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":76929,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76922,"src":"1606:6:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":76927,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40090,"src":"1596:5:160","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":76930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1596:17:160","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76931,"nodeType":"ExpressionStatement","src":"1596:17:160"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":76925,"kind":"modifierInvocation","modifierName":{"id":76924,"name":"onlyOwner","nameLocations":["1576:9:160"],"nodeType":"IdentifierPath","referencedDeclaration":39282,"src":"1576:9:160"},"nodeType":"ModifierInvocation","src":"1576:9:160"}],"name":"mint","nameLocation":"1536:4:160","parameters":{"id":76923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76920,"mutability":"mutable","name":"to","nameLocation":"1549:2:160","nodeType":"VariableDeclaration","scope":76933,"src":"1541:10:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":76919,"name":"address","nodeType":"ElementaryTypeName","src":"1541:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":76922,"mutability":"mutable","name":"amount","nameLocation":"1561:6:160","nodeType":"VariableDeclaration","scope":76933,"src":"1553:14:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76921,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1540:28:160"},"returnParameters":{"id":76926,"nodeType":"ParameterList","parameters":[],"src":"1586:0:160"},"scope":76934,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":76840,"name":"Initializable","nameLocations":["660:13:160"],"nodeType":"IdentifierPath","referencedDeclaration":39641,"src":"660:13:160"},"id":76841,"nodeType":"InheritanceSpecifier","src":"660:13:160"},{"baseName":{"id":76842,"name":"ERC20Upgradeable","nameLocations":["679:16:160"],"nodeType":"IdentifierPath","referencedDeclaration":40258,"src":"679:16:160"},"id":76843,"nodeType":"InheritanceSpecifier","src":"679:16:160"},{"baseName":{"id":76844,"name":"ERC20BurnableUpgradeable","nameLocations":["701:24:160"],"nodeType":"IdentifierPath","referencedDeclaration":40320,"src":"701:24:160"},"id":76845,"nodeType":"InheritanceSpecifier","src":"701:24:160"},{"baseName":{"id":76846,"name":"OwnableUpgradeable","nameLocations":["731:18:160"],"nodeType":"IdentifierPath","referencedDeclaration":39387,"src":"731:18:160"},"id":76847,"nodeType":"InheritanceSpecifier","src":"731:18:160"},{"baseName":{"id":76848,"name":"ERC20PermitUpgradeable","nameLocations":["755:22:160"],"nodeType":"IdentifierPath","referencedDeclaration":40489,"src":"755:22:160"},"id":76849,"nodeType":"InheritanceSpecifier","src":"755:22:160"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[76934,40489,40646,41119,41540,43202,39387,40320,40258,41582,43166,43140,40535,39641],"name":"WrappedVara","nameLocation":"641:11:160","scope":76935,"usedErrors":[39223,39228,39404,39407,40355,40362,40549,41552,41557,41562,41571,41576,41581,44912,44917,44922],"usedEvents":[39234,39412,41520,43074,43083]}],"license":"UNLICENSED"},"id":160} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460aa575f516020611d6d5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051611cbe90816100af8239f35b6001600160401b0319166001600160401b039081175f516020611d6d5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f516020611c695f395f51905f52549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f516020611c695f395f51905f525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f516020611b895f395f51905f525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f516020611b895f395f51905f52555b825167ffffffffffffffff81116107a8576104495f516020611be95f395f51905f525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f516020611be95f395f51905f52555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f516020611bc95f395f51905f525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f516020611bc95f395f51905f52555b825167ffffffffffffffff81116107a8576105985f516020611c495f395f51905f525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f516020611c495f395f51905f52555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f516020611c695f395f51905f5254165f516020611c695f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f516020611c495f395f51905f525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f516020611c495f395f51905f52556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f516020611c495f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f516020611bc95f395f51905f525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f516020611bc95f395f51905f5255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f516020611bc95f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f516020611be95f395f51905f525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f516020611be95f395f51905f525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f516020611be95f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f516020611b895f395f51905f525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f516020611b895f395f51905f5255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f516020611b895f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f516020611c695f395f51905f525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f516020611be95f395f51905f5254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f516020611be95f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f516020611c095f395f51905f52546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f516020611bc95f395f51905f5254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f516020611c495f395f51905f5254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f516020611c495f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f516020611bc95f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f516020611c095f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f516020611ba95f395f51905f52602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f516020611c695f395f51905f525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f516020611c695f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f516020611c295f395f51905f5254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f516020611b895f395f51905f52546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f516020611b895f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f516020611c095f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f516020611ba95f395f51905f5260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f516020611ba95f395f51905f5284520360405f2055845f525f516020611ba95f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f516020611c095f395f51905f52546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f516020611ba95f395f51905f5260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f516020611ba95f395f51905f528452036040862055805f516020611c295f395f51905f5254035f516020611c295f395f51905f5255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f516020611c295f395f51905f5254908282018092116117ac575f516020611c295f395f51905f52919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f516020611c295f395f51905f5254035f516020611c295f395f51905f52555b604051908152a3565b8484525f516020611ba95f395f51905f52825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f516020611c695f395f51905f525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f516020611bc95f395f51905f5254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f516020611bc95f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f516020611c495f395f51905f5254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f516020611c495f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220d08a572a49deef0fe43c12723c823f7d35f0880c0978a58045ae35f94b3d290a64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00","sourceMap":"632:990:121:-:0;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;632:990:121;;7985:34:25;7981:146;;-1:-1:-1;632:990:121;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;632:990:121;-1:-1:-1;;;;;632:990:121;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;8087:29:25;;632:990:121;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;632:990:121;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120d578063095ea7b3146111e757806318160ddd146111be57806323b872dd14611186578063313ce5671461116b5780633644e5151461114957806340c10f191461110c57806342966c68146110ef5780636c2eb3501461105557806370a0823114611011578063715018a614610faa57806379cc679014610f7a5780637ecebe0014610f2457806384b0196e14610c505780638da5cb5b14610c1c57806395d89b4114610b22578063a9059cbb14610af1578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112ee565b6101246115b2565b6113ac565b005b5f80fd5b3461012b57604036600319011261012b576101486112ee565b610159610153611304565b91611374565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112ee565b610197611304565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611352565b5190206102636117c0565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611852565b909291926118df565b6001600160a01b03168481036102ae5750610129935061169b565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112ee565b5f516020611c695f395f51905f52549060ff8260401c16159167ffffffffffffffff811680159081610ae9575b6001149081610adf575b159081610ad6575b50610ac75767ffffffffffffffff1981166001175f516020611c695f395f51905f525582610a9b575b5060405191610369604084611352565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611352565b6005835264575641524160d81b60208401526103ab611827565b6103b3611827565b835167ffffffffffffffff81116107a8576103db5f516020611b895f395f51905f525461131a565b601f8111610a2c575b50602094601f82116001146109b1579481929394955f926109a6575b50508160011b915f199060031b1c1916175f516020611b895f395f51905f52555b825167ffffffffffffffff81116107a8576104495f516020611be95f395f51905f525461131a565b601f8111610937575b506020601f82116001146108bc57819293945f926108b1575b50508160011b915f199060031b1c1916175f516020611be95f395f51905f52555b610494611827565b61049c611827565b6104a4611827565b6104ad816113ac565b604051916104bc604084611352565b600c83526b57726170706564205661726160a01b60208401526104dd611827565b604051916104ec604084611352565b60018352603160f81b6020840152610502611827565b835167ffffffffffffffff81116107a85761052a5f516020611bc95f395f51905f525461131a565b601f8111610842575b50602094601f82116001146107c7579481929394955f926107bc575b50508160011b915f199060031b1c1916175f516020611bc95f395f51905f52555b825167ffffffffffffffff81116107a8576105985f516020611c495f395f51905f525461131a565b601f8111610739575b506020601f82116001146106be57819293945f926106b3575b50508160011b915f199060031b1c1916175f516020611c495f395f51905f52555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a057670de0b6b3a7640000610643916116fe565b61064957005b68ff0000000000000000195f516020611c695f395f51905f5254165f516020611c695f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f516020611c495f395f51905f525f52805f20915f5b81811061072157509583600195969710610709575b505050811b015f516020611c495f395f51905f52556105db565b01515f1960f88460031b161c191690558480806106ef565b9192602060018192868b0151815501940192016106da565b5f516020611c495f395f51905f525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c8101916020841061079e575b601f0160051c01905b81811061079357506105a1565b5f8155600101610786565b909150819061077d565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f516020611bc95f395f51905f525f52805f20915f5b88811061082a57508360019596979810610812575b505050811b015f516020611bc95f395f51905f5255610570565b01515f1960f88460031b161c191690558580806107f8565b919260206001819286850151815501940192016107e3565b5f516020611bc95f395f51905f525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a7575b601f0160051c01905b81811061089c5750610533565b5f815560010161088f565b9091508190610886565b01519050848061046b565b601f198216905f516020611be95f395f51905f525f52805f20915f5b81811061091f57509583600195969710610907575b505050811b015f516020611be95f395f51905f525561048c565b01515f1960f88460031b161c191690558480806108ed565b9192602060018192868b0151815501940192016108d8565b5f516020611be95f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099c575b601f0160051c01905b8181106109915750610452565b5f8155600101610984565b909150819061097b565b015190508580610400565b601f198216955f516020611b895f395f51905f525f52805f20915f5b888110610a14575083600195969798106109fc575b505050811b015f516020611b895f395f51905f5255610421565b01515f1960f88460031b161c191690558580806109e2565b919260206001819286850151815501940192016109cd565b5f516020611b895f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a91575b601f0160051c01905b818110610a8657506103e4565b5f8155600101610a79565b9091508190610a70565b68ffffffffffffffffff191668010000000000000001175f516020611c695f395f51905f525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b17610b0d6112ee565b60243590336114e1565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f516020611be95f395f51905f5254610b4e8161131a565b8084529060018116908115610bf85750600114610b8e575b610b8a83610b7681850382611352565b6040519182916020835260208301906112ca565b0390f35b5f516020611be95f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610bde57509091508101602001610b76610b66565b919260018160209254838588010152019101909291610bc6565b60ff191660208086019190915291151560051b84019091019150610b769050610b66565b3461012b575f36600319011261012b575f516020611c095f395f51905f52546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efb575b15610ebe576040515f516020611bc95f395f51905f5254815f610cab8361131a565b8083529260018116908115610e9f5750600114610e34575b610ccf92500382611352565b6040515f516020611c495f395f51905f5254815f610cec8361131a565b8083529260018116908115610e155750600114610daa575b610d1791925092610d4e94930382611352565b6020610d5c60405192610d2a8385611352565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112ca565b9085820360408701526112ca565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9357505050500390f35b835185528695509381019392810192600101610d84565b505f516020611c495f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610df9575050906020610d1792820101610d04565b6020919350806001915483858801015201910190918392610de1565b60209250610d1794915060ff191682840152151560051b820101610d04565b505f516020611bc95f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e83575050906020610ccf92820101610cc3565b6020919350806001915483858801015201910190918392610e6b565b60209250610ccf94915060ff191682840152151560051b820101610cc3565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c89565b3461012b57602036600319011261012b57610f3d6112ee565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f966112ee565b60243590610fa582338361141d565b6115e5565b3461012b575f36600319011261012b57610fc26115b2565b5f516020611c095f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110326112ee565b165f525f516020611ba95f395f51905f52602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106d6115b2565b5f516020611c695f395f51905f525460ff8160401c1680156110da575b610ac75760029068ffffffffffffffffff1916175f516020611c695f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108a565b3461012b57602036600319011261012b57610129600435336115e5565b3461012b57604036600319011261012b576111256112ee565b61112d6115b2565b6001600160a01b038116156106a05761012990602435906116fe565b3461012b575f36600319011261012b5760206111636117c0565b604051908152f35b3461012b575f36600319011261012b576020604051600c8152f35b3461012b57606036600319011261012b57610b176111a26112ee565b6111aa611304565b604435916111b983338361141d565b6114e1565b3461012b575f36600319011261012b5760205f516020611c295f395f51905f5254604051908152f35b3461012b57604036600319011261012b57610b176112036112ee565b602435903361169b565b3461012b575f36600319011261012b576040515f5f516020611b895f395f51905f52546112398161131a565b8084529060018116908115610bf8575060011461126057610b8a83610b7681850382611352565b5f516020611b895f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b057509091508101602001610b76610b66565b919260018160209254838588010152019101909291611298565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c92168015611348575b602083101461133457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611329565b90601f8019910116810190811067ffffffffffffffff8211176107a857604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140a575f516020611c095f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142883611374565b60018060a01b0382165f5260205260405f2054925f19840361144b575b50505050565b8284106114be576001600160a01b038116156114ab576001600160a01b038216156114985761147990611374565b9060018060a01b03165f5260205260405f20910390555f808080611445565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b031690811561159f576001600160a01b03169182156106a057815f525f516020611ba95f395f51905f5260205260405f205481811061158657817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f516020611ba95f395f51905f5284520360405f2055845f525f516020611ba95f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f516020611c095f395f51905f52546001600160a01b031633036115d257565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b0316801561159f57805f525f516020611ba95f395f51905f5260205260405f2054838110611681576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f516020611ba95f395f51905f528452036040862055805f516020611c295f395f51905f5254035f516020611c295f395f51905f5255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ab576001600160a01b0316928315611498577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ea602092611374565b855f5282528060405f2055604051908152a3565b5f516020611c295f395f51905f5254908282018092116117ac575f516020611c295f395f51905f52919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178a57805f516020611c295f395f51905f5254035f516020611c295f395f51905f52555b604051908152a3565b8484525f516020611ba95f395f51905f52825260408420818154019055611781565b634e487b7160e01b5f52601160045260245ffd5b6117c8611953565b6117d0611a80565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182160c082611352565b51902090565b60ff5f516020611c695f395f51905f525460401c161561184357565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118c9575f516001600160a01b038116156118bf57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561193f57806118f1575050565b600181036119085763f645eedf60e01b5f5260045ffd5b60028103611923575063fce698f760e01b5f5260045260245ffd5b60031461192d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f516020611bc95f395f51905f5254905f816119718461131a565b9182825260208201946001811690815f14611a6457506001146119f9575b61199b92500382611352565b519081156119a7572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d45790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f516020611bc95f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4857505090602061199b9282010161198f565b6020919350806001915483858801015201910190918392611a30565b60ff191686525061199b92151560051b8201602001905061198f565b6040515f516020611c495f395f51905f5254905f81611a9e8461131a565b9182825260208201946001811690815f14611b6c5750600114611b01575b611ac892500382611352565b51908115611ad4572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d45790565b505f516020611c495f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b50575050906020611ac892820101611abc565b6020919350806001915483858801015201910190918392611b38565b60ff1916865250611ac892151560051b82016020019050611abc56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220d08a572a49deef0fe43c12723c823f7d35f0880c0978a58045ae35f94b3d290a64736f6c634300081c0033","sourceMap":"632:990:121:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;2357:1:24;632:990:121;;:::i;:::-;2303:62:24;;:::i;:::-;2357:1;:::i;:::-;632:990:121;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;;;:::i;:::-;4867:20:26;632:990:121;;:::i;:::-;4867:20:26;;:::i;:::-;:29;632:990:121;;;;;;-1:-1:-1;632:990:121;;;;;-1:-1:-1;632:990:121;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2301:15:28;;:26;2297:97;;7051:25:58;7105:8;632:990:121;;;;;;;;;;;;972:64:30;632:990:121;;;;;;;;;;;;;;;;2435:78:28;632:990:121;2435:78:28;;632:990:121;1279:95:28;632:990:121;;1279:95:28;632:990:121;1279:95:28;;632:990:121;;;;;;;;;1279:95:28;;632:990:121;1279:95:28;632:990:121;1279:95:28;;632:990:121;;1279:95:28;;632:990:121;;1279:95:28;;632:990:121;;2435:78:28;;;632:990:121;2435:78:28;;:::i;:::-;632:990:121;2425:89:28;;4094:23:31;;:::i;:::-;3445:249:59;632:990:121;3445:249:59;;-1:-1:-1;;;3445:249:59;;;;;;;;;;632:990:121;;;3445:249:59;632:990:121;;3445:249:59;;7051:25:58;:::i;:::-;7105:8;;;;;:::i;:::-;-1:-1:-1;;;;;632:990:121;2638:15:28;;;2634:88;;10117:4:26;;;;;:::i;2634:88:28:-;2676:35;;;;;632:990:121;2676:35:28;632:990:121;;;;;;2676:35:28;2297:97;2350:33;;;;632:990:121;2350:33:28;632:990:121;;;;2350:33:28;632:990:121;;;;;;-1:-1:-1;;632:990:121;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;4301:16:25;632:990:121;;;;4726:16:25;;:34;;;;632:990:121;4805:1:25;4790:16;:50;;;;632:990:121;4855:13:25;:30;;;;632:990:121;4851:91:25;;;-1:-1:-1;;632:990:121;;4805:1:25;632:990:121;-1:-1:-1;;;;;;;;;;;632:990:121;;4979:67:25;;632:990:121;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:121;;;;;;;;;;;:::i;:::-;821:14;632:990;;-1:-1:-1;;;632:990:121;821:14;;;6893:76:25;;:::i;:::-;;;:::i;:::-;632:990:121;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;2600:7:26;632:990:121;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;2600:7:26;632:990:121;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;6893:76:25;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6961:1;;;:::i;:::-;632:990:121;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:990:121;;;;6893:76:25;;:::i;:::-;632:990:121;;;;;;;:::i;:::-;4805:1:25;632:990:121;;-1:-1:-1;;;632:990:121;;;;6893:76:25;;:::i;:::-;632:990:121;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;2600:7:26;632:990:121;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;2600:7:26;632:990:121;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;2806:64:31;632:990:121;;;3902:16:31;632:990:121;-1:-1:-1;;;;;632:990:121;;8803:21:26;8799:91;;941:9:121;8928:5:26;;;:::i;:::-;5066:101:25;;632:990:121;5066:101:25;632:990:121;;-1:-1:-1;;;;;;;;;;;632:990:121;;-1:-1:-1;;;;;;;;;;;632:990:121;5142:14:25;632:990:121;;;4805:1:25;632:990:121;;5142:14:25;632:990:121;8799:91:26;8847:32;;;632:990:121;8847:32:26;632:990:121;;;;;8847:32:26;632:990:121;;;;-1:-1:-1;632:990:121;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;2600:7:26;632:990:121;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;-1:-1:-1;632:990:121;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:121;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;2600:7:26;632:990:121;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;-1:-1:-1;632:990:121;;;;;;;;-1:-1:-1;632:990:121;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;2600:7:26;632:990:121;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;-1:-1:-1;632:990:121;;;;;;;;-1:-1:-1;632:990:121;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;2600:7:26;632:990:121;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;821:14;632:990;;;;;;;;;;;;821:14;632:990;;;;;;;;;;;;;;;;4805:1:25;632:990:121;;;;;;-1:-1:-1;632:990:121;;;;4979:67:25;-1:-1:-1;;632:990:121;;;-1:-1:-1;;;;;;;;;;;632:990:121;4979:67:25;;;4851:91;6498:23;;;632:990:121;4908:23:25;632:990:121;;4908:23:25;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;632:990:121;;;;;;-1:-1:-1;;632:990:121;;;;4616:5:26;632:990:121;;:::i;:::-;;;966:10:29;;4616:5:26;:::i;:::-;632:990:121;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;-1:-1:-1;632:990:121;;;;;;;-1:-1:-1;632:990:121;;-1:-1:-1;632:990:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:121;;-1:-1:-1;632:990:121;;;;;;;;-1:-1:-1;;632:990:121;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;-1:-1:-1;;;;;632:990:121;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;2806:64:31;632:990:121;5777:18:31;:43;;;632:990:121;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5965:13:31;632:990:121;;;;6000:4:31;632:990:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:121;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;632:990:121;;;;;;;;;;;;-1:-1:-1;;;632:990:121;;;;;;;5777:43:31;632:990:121;5799:16:31;632:990:121;5799:21:31;5777:43;;632:990:121;;;;;;-1:-1:-1;;632:990:121;;;;;;:::i;:::-;;;;;;;;;972:64:30;632:990:121;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;1479:5:27;632:990:121;;:::i;:::-;;;966:10:29;1448:5:27;966:10:29;;1448:5:27;;:::i;:::-;1479;:::i;632:990:121:-;;;;;;-1:-1:-1;;632:990:121;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:121;;-1:-1:-1;;;;;;632:990:121;;;;;;;-1:-1:-1;;;;;632:990:121;3975:40:24;632:990:121;;3975:40:24;632:990:121;;;;;;;-1:-1:-1;;632:990:121;;;;-1:-1:-1;;;;;632:990:121;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;6431:44:25;;;;632:990:121;6427:105:25;;1427:1:121;632:990;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;6656:20:25;632:990:121;;;1427:1;632:990;;6656:20:25;632:990:121;6431:44:25;632:990:121;1427:1;632:990;;;6450:25:25;;6431:44;;632:990:121;;;;;;-1:-1:-1;;632:990:121;;;;1005:5:27;632:990:121;;966:10:29;1005:5:27;:::i;632:990:121:-;;;;;;-1:-1:-1;;632:990:121;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;632:990:121;;8803:21:26;8799:91;;8928:5;632:990:121;;;8928:5:26;;:::i;632:990:121:-;;;;;;-1:-1:-1;;632:990:121;;;;;4094:23:31;;:::i;:::-;632:990:121;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;;;;1512:2;632:990;;;;;;;;;-1:-1:-1;;632:990:121;;;;6198:5:26;632:990:121;;:::i;:::-;;;:::i;:::-;;;966:10:29;6162:5:26;966:10:29;;6162:5:26;;:::i;:::-;6198;:::i;632:990:121:-;;;;;;-1:-1:-1;;632:990:121;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;;10117:4:26;632:990:121;;:::i;:::-;;;966:10:29;;10117:4:26;:::i;632:990:121:-;;;;;;-1:-1:-1;;632:990:121;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;-1:-1:-1;632:990:121;;;;;;;-1:-1:-1;632:990:121;;-1:-1:-1;632:990:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:990:121;;;;;;;;-1:-1:-1;;632:990:121;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:121;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:990:121;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;632:990:121;;;;;4867:13:26;632:990:121;;;;;;:::o;3405:215:24:-;-1:-1:-1;;;;;632:990:121;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;632:990:121;;-1:-1:-1;;;;;;632:990:121;;;;;;;-1:-1:-1;;;;;632:990:121;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;632:990:121;;3509:1:24;3534:31;11745:477:26;;;4867:20;;;:::i;:::-;632:990:121;;;;;;;-1:-1:-1;632:990:121;;;;-1:-1:-1;632:990:121;;;;;11910:37:26;;11906:310;;11745:477;;;;;:::o;11906:310::-;11967:24;;;11963:130;;-1:-1:-1;;;;;632:990:121;;11141:19:26;11137:89;;-1:-1:-1;;;;;632:990:121;;11239:21:26;11235:90;;11334:20;;;:::i;:::-;:29;632:990:121;;;;;;-1:-1:-1;632:990:121;;;;-1:-1:-1;632:990:121;;;;;11906:310:26;;;;;;11235:90;11283:31;;;-1:-1:-1;11283:31:26;-1:-1:-1;11283:31:26;632:990:121;;-1:-1:-1;11283:31:26;11137:89;11183:32;;;-1:-1:-1;11183:32:26;-1:-1:-1;11183:32:26;632:990:121;;-1:-1:-1;11183:32:26;11963:130;12018:60;;;;;;-1:-1:-1;12018:60:26;632:990:121;;;;;;12018:60:26;632:990:121;;;;;;-1:-1:-1;12018:60:26;6605:300;-1:-1:-1;;;;;632:990:121;;6688:18:26;;6684:86;;-1:-1:-1;;;;;632:990:121;;6783:16:26;;6779:86;;632:990:121;6704:1:26;632:990:121;-1:-1:-1;;;;;;;;;;;632:990:121;;;6704:1:26;632:990:121;;7609:19:26;;;7605:115;;632:990:121;8358:25:26;632:990:121;;;;6704:1:26;632:990:121;-1:-1:-1;;;;;;;;;;;632:990:121;;;;6704:1:26;632:990:121;;;6704:1:26;632:990:121;-1:-1:-1;;;;;;;;;;;632:990:121;;;6704:1:26;632:990:121;;;;;;;;;;;;8358:25:26;6605:300::o;7605:115::-;7655:50;;;;6704:1;7655:50;;632:990:121;;;;;;6704:1:26;7655:50;6684:86;6729:30;;;6704:1;6729:30;6704:1;6729:30;632:990:121;;6704:1:26;6729:30;2658:162:24;-1:-1:-1;;;;;;;;;;;632:990:121;-1:-1:-1;;;;;632:990:121;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;632:990:121;;-1:-1:-1;2763:40:24;9259:206:26;;;;-1:-1:-1;;;;;632:990:121;9329:21:26;;9325:89;;632:990:121;9348:1:26;632:990:121;-1:-1:-1;;;;;;;;;;;632:990:121;;;9348:1:26;632:990:121;;7609:19:26;;;7605:115;;632:990:121;;9348:1:26;632:990:121;;8358:25:26;632:990:121;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;8358:25:26;9259:206::o;7605:115::-;7655:50;;;;;9348:1;7655:50;;632:990:121;;;;;;9348:1:26;7655:50;10976:487;;-1:-1:-1;;;;;632:990:121;;;11141:19:26;;11137:89;;-1:-1:-1;;;;;632:990:121;;11239:21:26;;11235:90;;11415:31;11334:20;;632:990:121;11334:20:26;;:::i;:::-;632:990:121;-1:-1:-1;632:990:121;;;;;-1:-1:-1;632:990:121;;;;;;;11415:31:26;10976:487::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;-1:-1:-1;;;;;632:990:121;;;;8358:25:26;;632:990:121;;7918:16:26;632:990:121;;;-1:-1:-1;;;;;;;;;;;632:990:121;;-1:-1:-1;;;;;;;;;;;632:990:121;7914:429:26;632:990:121;;;;;8358:25:26;7220:1170::o;7914:429::-;632:990:121;;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;;;;;7914:429:26;;632:990:121;;;;;941:9;;;;;632:990;941:9;4130:191:31;4243:17;;:::i;:::-;4262:20;;:::i;:::-;632:990:121;;4221:92:31;;;;632:990:121;2073:95:31;632:990:121;;;2073:95:31;;632:990:121;2073:95:31;;;632:990:121;4284:13:31;2073:95;;;632:990:121;4307:4:31;2073:95;;;632:990:121;2073:95:31;4221:92;;;;;;:::i;:::-;632:990:121;4211:103:31;;4130:191;:::o;7084:141:25:-;632:990:121;-1:-1:-1;;;;;;;;;;;632:990:121;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;5203:1551:58;;;6283:66;6270:79;;6266:164;;632:990:121;;;;;;-1:-1:-1;632:990:121;;;;;;;;;;;;;;;;;;;6541:24:58;;;;;;;;;-1:-1:-1;6541:24:58;-1:-1:-1;;;;;632:990:121;;6579:20:58;6575:113;;6698:49;-1:-1:-1;6698:49:58;-1:-1:-1;5203:1551:58;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:58;6541:24;6615:62;-1:-1:-1;6615:62:58;:::o;6541:24::-;632:990:121;;;-1:-1:-1;632:990:121;;;;;6266:164:58;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o;7280:532::-;632:990:121;;;;;;7366:29:58;;;7411:7;;:::o;7362:444::-;632:990:121;7462:38:58;;632:990:121;;7523:23:58;;;7375:20;7523:23;632:990:121;7375:20:58;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;7375:20;7634:46;632:990:121;;;7375:20:58;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;7375:20;7763:32;632:990:121;;;7375:20:58;7763:32;632:990:121;;;;7375:20:58;632:990:121;;;;;7375:20:58;632:990:121;7058:687:31;632:990:121;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7230:22:31;;;;7275;7268:29;:::o;7226:513::-;-1:-1:-1;;2806:64:31;632:990:121;7603:15:31;;;;7638:17;:::o;7599:130::-;7694:20;7701:13;7694:20;:::o;632:990:121:-;-1:-1:-1;;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;-1:-1:-1;632:990:121;;;;;;;;;;;-1:-1:-1;632:990:121;;7966:723:31;632:990:121;;-1:-1:-1;;;;;;;;;;;632:990:121;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;8147:25:31;;;;8195;8188:32;:::o;8143:540::-;-1:-1:-1;;8507:16:31;632:990:121;8541:18:31;;;;8579:20;:::o;632:990:121:-;-1:-1:-1;;;;;;;;;;;;632:990:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:990:121;;;-1:-1:-1;632:990:121;;;;;;;;;;;-1:-1:-1;632:990:121;","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":symbiotic-core/=lib/symbiotic-core/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xbb96dc9c468170c3224126e953de917e06332ec5909a3d85e6e5bb0df10c5139\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d14e6486e127e7e31c2ffccfc212c7ebaaecf8fb05677575128b449ee113def2\",\"dweb:/ipfs/QmabvyfStwBcum8mGfkmxcTV45rjyHmzHGCxfxyhmu48Yx\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x4c6100a8ab53ef249c937067f7d9779ee0966fb55b39903628c169428fdeee76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2b96738706660e46a7d77d13e14191d658b87720e2000a52c02890505183c118\",\"dweb:/ipfs/QmRUjhpmBAEmVEqD4L5LznnDR9gQdgXg17kZExC9N55Q63\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x7a618cd9a1eea21201ec2ed8484080ca6225215e8883723bef34b9dcf22aa3b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a73451277e35206f1f8b9f20b2cd41732081bd23523f5a2c64e1e67694c33\",\"dweb:/ipfs/QmdPVK7KACRpoavNUoixGsi8jBWeZUJfNYCzZbHGSGz5yu\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x27dbc90e5136ffe46c04f7596fc2dbcc3acebd8d504da3d93fdb8496e6de04f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea8b92e4245d75a5579c10f22f118f7b4ba07c57341f181f0b2a85ff8663de3\",\"dweb:/ipfs/Qme3Ss5ByjmkxxkMdLpyu7fQ1PCtjNFH1wEFszt2BZePiG\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0\",\"dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718\",\"dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","symbiotic-core/=lib/symbiotic-core/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0xbb96dc9c468170c3224126e953de917e06332ec5909a3d85e6e5bb0df10c5139","urls":["bzz-raw://d14e6486e127e7e31c2ffccfc212c7ebaaecf8fb05677575128b449ee113def2","dweb:/ipfs/QmabvyfStwBcum8mGfkmxcTV45rjyHmzHGCxfxyhmu48Yx"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x4c6100a8ab53ef249c937067f7d9779ee0966fb55b39903628c169428fdeee76","urls":["bzz-raw://2b96738706660e46a7d77d13e14191d658b87720e2000a52c02890505183c118","dweb:/ipfs/QmRUjhpmBAEmVEqD4L5LznnDR9gQdgXg17kZExC9N55Q63"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x7a618cd9a1eea21201ec2ed8484080ca6225215e8883723bef34b9dcf22aa3b5","urls":["bzz-raw://287a73451277e35206f1f8b9f20b2cd41732081bd23523f5a2c64e1e67694c33","dweb:/ipfs/QmdPVK7KACRpoavNUoixGsi8jBWeZUJfNYCzZbHGSGz5yu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330","urls":["bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf","dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x27dbc90e5136ffe46c04f7596fc2dbcc3acebd8d504da3d93fdb8496e6de04f6","urls":["bzz-raw://0ea8b92e4245d75a5579c10f22f118f7b4ba07c57341f181f0b2a85ff8663de3","dweb:/ipfs/Qme3Ss5ByjmkxxkMdLpyu7fQ1PCtjNFH1wEFszt2BZePiG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x725209b582291bb83058e3078624b53d15a133f7401c30295e7f3704181d2aed","urls":["bzz-raw://0564ddb19c6d870e27b789d8f985283d815267ad7224883c2d5243c8bacc7dc0","dweb:/ipfs/QmeC953H4sj88ZRFdJNFdmpf7J9SksP1wK4jyMHLo66z49"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84","urls":["bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9","dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575","urls":["bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e","dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0x3e0983635bf88ee5284c4385c01431135b7eec294e2f1c0d22bc2dddc16790dd","urls":["bzz-raw://0302725cd5b1bd6afacebd0d30d445bb1c86152745b6de42dc1a66a570b42718","dweb:/ipfs/QmVCurygXE5PV65uvC12ybtXYpL292PMmEUPnbRtGbAY1V"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":69473,"exportedSymbols":{"ERC20BurnableUpgradeable":[41265],"ERC20PermitUpgradeable":[41434],"ERC20Upgradeable":[41203],"Initializable":[40586],"OwnableUpgradeable":[40332],"WrappedVara":[69472]},"nodeType":"SourceUnit","src":"39:1584:121","nodes":[{"id":69367,"nodeType":"PragmaDirective","src":"39:24:121","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":69369,"nodeType":"ImportDirective","src":"65:96:121","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":69473,"sourceUnit":40587,"symbolAliases":[{"foreign":{"id":69368,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40586,"src":"73:13:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":69371,"nodeType":"ImportDirective","src":"162:102:121","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":69473,"sourceUnit":41204,"symbolAliases":[{"foreign":{"id":69370,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41203,"src":"170:16:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":69373,"nodeType":"ImportDirective","src":"265:133:121","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":69473,"sourceUnit":41266,"symbolAliases":[{"foreign":{"id":69372,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41265,"src":"273:24:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":69375,"nodeType":"ImportDirective","src":"399:101:121","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":69473,"sourceUnit":40333,"symbolAliases":[{"foreign":{"id":69374,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40332,"src":"407:18:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":69377,"nodeType":"ImportDirective","src":"501:129:121","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":69473,"sourceUnit":41435,"symbolAliases":[{"foreign":{"id":69376,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41434,"src":"509:22:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":69472,"nodeType":"ContractDefinition","src":"632:990:121","nodes":[{"id":69390,"nodeType":"VariableDeclaration","src":"784:51:121","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"808:10:121","scope":69472,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":69388,"name":"string","nodeType":"ElementaryTypeName","src":"784:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":69389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"821:14:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":69393,"nodeType":"VariableDeclaration","src":"841:46:121","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"865:12:121","scope":69472,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":69391,"name":"string","nodeType":"ElementaryTypeName","src":"841:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":69392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"880:7:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":69396,"nodeType":"VariableDeclaration","src":"893:57:121","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"918:20:121","scope":69472,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":69394,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":69395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"941:9:121","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":69404,"nodeType":"FunctionDefinition","src":"1010:53:121","nodes":[],"body":{"id":69403,"nodeType":"Block","src":"1024:39:121","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":69400,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40554,"src":"1034:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":69401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1034:22:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69402,"nodeType":"ExpressionStatement","src":"1034:22:121"}]},"documentation":{"id":69397,"nodeType":"StructuredDocumentation","src":"957:48:121","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":69398,"nodeType":"ParameterList","parameters":[],"src":"1021:2:121"},"returnParameters":{"id":69399,"nodeType":"ParameterList","parameters":[],"src":"1024:0:121"},"scope":69472,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":69438,"nodeType":"FunctionDefinition","src":"1069:297:121","nodes":[],"body":{"id":69437,"nodeType":"Block","src":"1130:236:121","nodes":[],"statements":[{"expression":{"arguments":[{"id":69412,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69390,"src":"1153:10:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":69413,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69393,"src":"1165:12:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":69411,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40654,"src":"1140:12:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":69414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1140:38:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69415,"nodeType":"ExpressionStatement","src":"1140:38:121"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":69416,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41224,"src":"1188:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":69417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1188:22:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69418,"nodeType":"ExpressionStatement","src":"1188:22:121"},{"expression":{"arguments":[{"id":69420,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69406,"src":"1235:12:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":69419,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40192,"src":"1220:14:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":69421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:28:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69422,"nodeType":"ExpressionStatement","src":"1220:28:121"},{"expression":{"arguments":[{"id":69424,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69390,"src":"1277:10:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":69423,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41321,"src":"1258:18:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":69425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1258:30:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69426,"nodeType":"ExpressionStatement","src":"1258:30:121"},{"expression":{"arguments":[{"id":69428,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69406,"src":"1305:12:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":69434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":69429,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69396,"src":"1319:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":69433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":69430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1342:2:121","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":69431,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[69456],"referencedDeclaration":69456,"src":"1348:8:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":69432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1348:10:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1342:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1319:39:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":69427,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41035,"src":"1299:5:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":69435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1299:60:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69436,"nodeType":"ExpressionStatement","src":"1299:60:121"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":69409,"kind":"modifierInvocation","modifierName":{"id":69408,"name":"initializer","nameLocations":["1118:11:121"],"nodeType":"IdentifierPath","referencedDeclaration":40440,"src":"1118:11:121"},"nodeType":"ModifierInvocation","src":"1118:11:121"}],"name":"initialize","nameLocation":"1078:10:121","parameters":{"id":69407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69406,"mutability":"mutable","name":"initialOwner","nameLocation":"1097:12:121","nodeType":"VariableDeclaration","scope":69438,"src":"1089:20:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69405,"name":"address","nodeType":"ElementaryTypeName","src":"1089:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1088:22:121"},"returnParameters":{"id":69410,"nodeType":"ParameterList","parameters":[],"src":"1130:0:121"},"scope":69472,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":69447,"nodeType":"FunctionDefinition","src":"1372:60:121","nodes":[],"body":{"id":69446,"nodeType":"Block","src":"1430:2:121","nodes":[],"statements":[]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":69441,"kind":"modifierInvocation","modifierName":{"id":69440,"name":"onlyOwner","nameLocations":["1403:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":40227,"src":"1403:9:121"},"nodeType":"ModifierInvocation","src":"1403:9:121"},{"arguments":[{"hexValue":"32","id":69443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:1:121","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":69444,"kind":"modifierInvocation","modifierName":{"id":69442,"name":"reinitializer","nameLocations":["1413:13:121"],"nodeType":"IdentifierPath","referencedDeclaration":40487,"src":"1413:13:121"},"nodeType":"ModifierInvocation","src":"1413:16:121"}],"name":"reinitialize","nameLocation":"1381:12:121","parameters":{"id":69439,"nodeType":"ParameterList","parameters":[],"src":"1393:2:121"},"returnParameters":{"id":69445,"nodeType":"ParameterList","parameters":[],"src":"1430:0:121"},"scope":69472,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":69456,"nodeType":"FunctionDefinition","src":"1438:83:121","nodes":[],"body":{"id":69455,"nodeType":"Block","src":"1495:26:121","nodes":[],"statements":[{"expression":{"hexValue":"3132","id":69453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1512:2:121","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":69452,"id":69454,"nodeType":"Return","src":"1505:9:121"}]},"baseFunctions":[40723],"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1447:8:121","overrides":{"id":69449,"nodeType":"OverrideSpecifier","overrides":[],"src":"1470:8:121"},"parameters":{"id":69448,"nodeType":"ParameterList","parameters":[],"src":"1455:2:121"},"returnParameters":{"id":69452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":69456,"src":"1488:5:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":69450,"name":"uint8","nodeType":"ElementaryTypeName","src":"1488:5:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1487:7:121"},"scope":69472,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":69471,"nodeType":"FunctionDefinition","src":"1527:93:121","nodes":[],"body":{"id":69470,"nodeType":"Block","src":"1586:34:121","nodes":[],"statements":[{"expression":{"arguments":[{"id":69466,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69458,"src":"1602:2:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":69467,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69460,"src":"1606:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":69465,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41035,"src":"1596:5:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":69468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1596:17:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69469,"nodeType":"ExpressionStatement","src":"1596:17:121"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":69463,"kind":"modifierInvocation","modifierName":{"id":69462,"name":"onlyOwner","nameLocations":["1576:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":40227,"src":"1576:9:121"},"nodeType":"ModifierInvocation","src":"1576:9:121"}],"name":"mint","nameLocation":"1536:4:121","parameters":{"id":69461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69458,"mutability":"mutable","name":"to","nameLocation":"1549:2:121","nodeType":"VariableDeclaration","scope":69471,"src":"1541:10:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69457,"name":"address","nodeType":"ElementaryTypeName","src":"1541:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":69460,"mutability":"mutable","name":"amount","nameLocation":"1561:6:121","nodeType":"VariableDeclaration","scope":69471,"src":"1553:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":69459,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1540:28:121"},"returnParameters":{"id":69464,"nodeType":"ParameterList","parameters":[],"src":"1586:0:121"},"scope":69472,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":69378,"name":"Initializable","nameLocations":["660:13:121"],"nodeType":"IdentifierPath","referencedDeclaration":40586,"src":"660:13:121"},"id":69379,"nodeType":"InheritanceSpecifier","src":"660:13:121"},{"baseName":{"id":69380,"name":"ERC20Upgradeable","nameLocations":["679:16:121"],"nodeType":"IdentifierPath","referencedDeclaration":41203,"src":"679:16:121"},"id":69381,"nodeType":"InheritanceSpecifier","src":"679:16:121"},{"baseName":{"id":69382,"name":"ERC20BurnableUpgradeable","nameLocations":["701:24:121"],"nodeType":"IdentifierPath","referencedDeclaration":41265,"src":"701:24:121"},"id":69383,"nodeType":"InheritanceSpecifier","src":"701:24:121"},{"baseName":{"id":69384,"name":"OwnableUpgradeable","nameLocations":["731:18:121"],"nodeType":"IdentifierPath","referencedDeclaration":40332,"src":"731:18:121"},"id":69385,"nodeType":"InheritanceSpecifier","src":"731:18:121"},{"baseName":{"id":69386,"name":"ERC20PermitUpgradeable","nameLocations":["755:22:121"],"nodeType":"IdentifierPath","referencedDeclaration":41434,"src":"755:22:121"},"id":69387,"nodeType":"InheritanceSpecifier","src":"755:22:121"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[69472,41434,41591,41935,42212,43875,40332,41265,41203,42254,43839,43813,41480,40586],"name":"WrappedVara","nameLocation":"641:11:121","scope":69473,"usedErrors":[40168,40173,40349,40352,41300,41307,41494,42224,42229,42234,42243,42248,42253,44961,44966,44971],"usedEvents":[40179,40357,42192,43747,43756]}],"license":"UNLICENSED"},"id":121} \ No newline at end of file diff --git a/ethexe/ethereum/src/abi/events/router.rs b/ethexe/ethereum/src/abi/events/router.rs index bb342955f16..b69ab70a593 100644 --- a/ethexe/ethereum/src/abi/events/router.rs +++ b/ethexe/ethereum/src/abi/events/router.rs @@ -69,8 +69,13 @@ impl From for RouterEvent { } } -impl From for RouterEvent { - fn from(_value: IRouter::ValidatorsChanged) -> Self { - Self::ValidatorsChanged +impl From for RouterEvent { + fn from(value: IRouter::NextEraValidatorsCommitted) -> Self { + Self::NextEraValidatorsCommitted { + next_era_start: value + .startTimestamp + .try_into() + .expect("next era start timestamp is too large"), + } } } diff --git a/ethexe/ethereum/src/abi/gear.rs b/ethexe/ethereum/src/abi/gear.rs index c17c29ee506..a624062ce15 100644 --- a/ethexe/ethereum/src/abi/gear.rs +++ b/ethexe/ethereum/src/abi/gear.rs @@ -45,6 +45,19 @@ impl From for Gear::CodeCommitment { } } +impl From for Gear::ValidatorsCommitment { + fn from(value: ValidatorsCommitment) -> Self { + Self { + validators: value + .validators + .into_iter() + .map(actor_id_to_address_lossy) + .collect(), + eraIndex: Uint256::from(value.era_index), + } + } +} + impl From for Gear::Message { fn from(value: Message) -> Self { Self { diff --git a/ethexe/ethereum/src/abi/mod.rs b/ethexe/ethereum/src/abi/mod.rs index 54e53e6123a..98ee8c59ef6 100644 --- a/ethexe/ethereum/src/abi/mod.rs +++ b/ethexe/ethereum/src/abi/mod.rs @@ -21,11 +21,17 @@ use alloy::sol; mod events; mod gear; -sol!( - #[sol(rpc)] - IMirror, - "Mirror.json" -); +pub use mirror_abi::*; + +// TODO (breathx): remove this dummy hack to avoid reentrancy issues with +// the `sol!` macro, dealing with internal libraries (e.g. 'Gear'). +mod mirror_abi { + alloy::sol!( + #[sol(rpc)] + IMirror, + "Mirror.json" + ); +} sol!( #[sol(rpc)] @@ -34,6 +40,7 @@ sol!( ); sol!( + #[allow(clippy::too_many_arguments)] #[sol(rpc)] IRouter, "Router.json" diff --git a/ethexe/ethereum/src/lib.rs b/ethexe/ethereum/src/lib.rs index 3243dbffcee..5be8a97df08 100644 --- a/ethexe/ethereum/src/lib.rs +++ b/ethexe/ethereum/src/lib.rs @@ -25,9 +25,9 @@ use abi::{ IWrappedVara::{self, initializeCall as WrappedVaraInitializeCall}, }; use alloy::{ - consensus::{self as alloy_consensus, SignableTransaction}, + consensus::SignableTransaction, network::{Ethereum as AlloyEthereum, EthereumWallet, Network, TxSigner}, - primitives::{Address, Bytes, ChainId, Signature, B256, U256}, + primitives::{Address, Bytes, ChainId, PrimitiveSignature as Signature, B256, U256}, providers::{ fillers::{ BlobGasFiller, ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, @@ -154,6 +154,8 @@ impl Ethereum { _mirror: mirror_address, _mirrorProxy: mirror_proxy_address, _wrappedVara: wvara_address, + _eraDuration: U256::from(24 * 60 * 60), + _electionDuration: U256::from(2 * 60 * 60), _validators: validators, } .abi_encode(), @@ -290,7 +292,7 @@ trait TryGetReceipt { async fn try_get_receipt(self) -> Result; } -impl TryGetReceipt for PendingTransactionBuilder<'_, T, N> { +impl TryGetReceipt for PendingTransactionBuilder { async fn try_get_receipt(self) -> Result { let tx_hash = *self.tx_hash(); let provider = self.provider().clone(); @@ -300,7 +302,9 @@ impl TryGetReceipt for PendingTransactio Err(err) => err, }; - for _ in 0..3 { + log::trace!("Failed to get transaction receipt for {tx_hash}. Retrying..."); + for n in 0..3 { + log::trace!("Attempt {n}. Error - {err}"); match err { PendingTransactionError::TransportError(RpcError::NullResp) => {} _ => break, diff --git a/ethexe/ethereum/src/mirror/mod.rs b/ethexe/ethereum/src/mirror/mod.rs index 366f37dc31f..41d78d95334 100644 --- a/ethexe/ethereum/src/mirror/mod.rs +++ b/ethexe/ethereum/src/mirror/mod.rs @@ -53,6 +53,13 @@ impl Mirror { )) } + pub async fn executable_balance_top_up(&self, value: u128) -> Result { + let builder = self.0.executableBalanceTopUp(value); + let receipt = builder.send().await?.try_get_receipt().await?; + + Ok((*receipt.transaction_hash).into()) + } + pub async fn send_message( &self, payload: impl AsRef<[u8]>, diff --git a/ethexe/ethereum/src/router/events.rs b/ethexe/ethereum/src/router/events.rs index ce67e48d491..48fd76762f2 100644 --- a/ethexe/ethereum/src/router/events.rs +++ b/ethexe/ethereum/src/router/events.rs @@ -16,10 +16,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::{decode_log, IRouter}; +use crate::{abi::utils::bytes32_to_h256, decode_log, IRouter}; use alloy::{primitives::B256, rpc::types::eth::Log, sol_types::SolEvent}; use anyhow::{anyhow, Result}; use ethexe_common::events::{RouterEvent, RouterRequestEvent}; +use gprimitives::H256; use signatures::*; pub mod signatures { @@ -33,7 +34,7 @@ pub mod signatures { COMPUTATION_SETTINGS_CHANGED: ComputationSettingsChanged, PROGRAM_CREATED: ProgramCreated, STORAGE_SLOT_CHANGED: StorageSlotChanged, - VALIDATORS_CHANGED: ValidatorsChanged, + NEXT_ERA_VALIDATORS_COMMITTED: NextEraValidatorsCommitted, } pub const REQUESTS: &[B256] = &[ @@ -41,7 +42,7 @@ pub mod signatures { COMPUTATION_SETTINGS_CHANGED, PROGRAM_CREATED, STORAGE_SLOT_CHANGED, - VALIDATORS_CHANGED, + NEXT_ERA_VALIDATORS_COMMITTED, ]; } @@ -71,7 +72,9 @@ pub fn try_extract_event(log: &Log) -> Result> { } PROGRAM_CREATED => decode_log::(log)?.into(), STORAGE_SLOT_CHANGED => decode_log::(log)?.into(), - VALIDATORS_CHANGED => decode_log::(log)?.into(), + NEXT_ERA_VALIDATORS_COMMITTED => { + decode_log::(log)?.into() + } _ => unreachable!("filtered above"), }; @@ -89,3 +92,13 @@ pub fn try_extract_request_event(log: &Log) -> Result Ok(Some(request_event)) } + +pub fn try_extract_committed_block_hash(log: &Log) -> Result> { + if log.topic0() != Some(&BLOCK_COMMITTED) { + return Ok(None); + } + + decode_log::(log) + .map(|e| Some(bytes32_to_h256(e.hash))) + .map_err(Into::into) +} diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index 1eada8df03f..4df12862d86 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -127,19 +127,10 @@ impl Router { Err(anyhow!("Failed to define if code is validated")) } - pub async fn create_program( - &self, - code_id: CodeId, - salt: H256, - payload: impl AsRef<[u8]>, - value: u128, - ) -> Result<(H256, ActorId)> { - let builder = self.instance.createProgram( - code_id.into_bytes().into(), - salt.to_fixed_bytes().into(), - payload.as_ref().to_vec().into(), - value, - ); + pub async fn create_program(&self, code_id: CodeId, salt: H256) -> Result<(H256, ActorId)> { + let builder = self + .instance + .createProgram(code_id.into_bytes().into(), salt.to_fixed_bytes().into()); let receipt = builder.send().await?.try_get_receipt().await?; let tx_hash = (*receipt.transaction_hash).into(); diff --git a/ethexe/observer/src/blobs.rs b/ethexe/observer/src/blobs.rs index 85553e79572..616d28c4827 100644 --- a/ethexe/observer/src/blobs.rs +++ b/ethexe/observer/src/blobs.rs @@ -18,7 +18,7 @@ use crate::observer::ObserverProvider; use alloy::{ - consensus::{SidecarCoder, SimpleCoder}, + consensus::{SidecarCoder, SimpleCoder, Transaction}, eips::eip4844::kzg_to_versioned_hash, providers::{Provider, ProviderBuilder}, rpc::types::{beacon::sidecar::BeaconBlobBundle, eth::BlockTransactionsKind}, @@ -89,7 +89,7 @@ impl BlobReader for ConsensusLayerBlobReader { .await? .ok_or_else(|| anyhow!("failed to get transaction"))?; let blob_versioned_hashes = tx - .blob_versioned_hashes + .blob_versioned_hashes() .ok_or_else(|| anyhow!("failed to get versioned hashes"))?; let blob_versioned_hashes = HashSet::<_, RandomState>::from_iter(blob_versioned_hashes); let block_hash = tx diff --git a/ethexe/observer/src/observer.rs b/ethexe/observer/src/observer.rs index 910d068fcd0..20043364c3a 100644 --- a/ethexe/observer/src/observer.rs +++ b/ethexe/observer/src/observer.rs @@ -5,7 +5,8 @@ use crate::{ use alloy::{ primitives::Address as AlloyAddress, providers::{Provider, ProviderBuilder, RootProvider}, - rpc::types::eth::{Filter, Topic}, + pubsub::Subscription, + rpc::types::eth::{Filter, Header, Topic}, transports::BoxTransport, }; use anyhow::{anyhow, Result}; @@ -24,19 +25,26 @@ use std::{collections::HashMap, sync::Arc}; use tokio::sync::watch; /// Max number of blocks to query in alloy. -pub(crate) const MAX_QUERY_BLOCK_RANGE: u64 = 100_000; +pub(crate) const MAX_QUERY_BLOCK_RANGE: usize = 256; pub(crate) type ObserverProvider = RootProvider; -#[derive(Clone)] pub struct Observer { provider: ObserverProvider, router_address: AlloyAddress, + // Always `Some` + blocks_subscription: Option>, blob_reader: Arc, status_sender: watch::Sender, status: ObserverStatus, } +impl Clone for Observer { + fn clone(&self) -> Self { + self.clone_with_resubscribe() + } +} + #[derive(Debug, Clone, Copy, Default)] pub struct ObserverStatus { pub eth_block_number: u64, @@ -44,6 +52,97 @@ pub struct ObserverStatus { pub last_router_state: u64, } +macro_rules! define_event_stream_method { + ( + $method_name:ident, + $read_events_fn:ident, + $block_event_type:ty, + $router_event_type:ty, + $block_data_type:ty, + $event_type:ty + ) => { + pub fn $method_name(&mut self) -> impl Stream + '_ { + let new_subscription = self.resubscribe_blocks(); + let old_subscription = self.blocks_subscription.take().expect("always some"); + self.blocks_subscription = Some(new_subscription); + async_stream::stream! { + let mut block_stream = old_subscription.into_stream(); + let mut futures = FuturesUnordered::new(); + + loop { + tokio::select! { + block = block_stream.next() => { + let Some(block) = block else { + log::info!("Block stream ended"); + break; + }; + + log::trace!("Received block: {:?}", block.hash); + + let block_hash = (*block.hash).into(); + let parent_hash = (*block.parent_hash).into(); + let block_number = block.number; + let block_timestamp = block.timestamp; + + let events = match $read_events_fn(block_hash, &self.provider, self.router_address).await { + Ok(events) => events, + Err(err) => { + log::error!("failed to read events: {err}"); + continue; + } + }; + + let mut codes_len = 0; + + for event in events.iter() { + if let $block_event_type::Router($router_event_type::CodeValidationRequested { code_id, blob_tx_hash }) = event { + codes_len += 1; + + let blob_reader = self.blob_reader.clone(); + let code_id = *code_id; + let blob_tx_hash = *blob_tx_hash; + + futures.push(async move { + let attempts = Some(3); + read_code_from_tx_hash(blob_reader, code_id, blob_tx_hash, attempts).await + }); + } + } + + self.update_status(|status| { + status.eth_block_number = block_number; + if codes_len > 0 { + status.last_router_state = block_number; + } + status.pending_upload_code = codes_len as u64; + }); + + let block_data = $block_data_type { + hash: block_hash, + header: BlockHeader { + height: block_number as u32, + timestamp: block_timestamp, + parent_hash, + }, + events, + }; + + yield $event_type::Block(block_data); + }, + future = futures.next(), if !futures.is_empty() => { + match future { + Some(Ok((code_id, code))) => yield $event_type::CodeLoaded { code_id, code }, + Some(Err(err)) => log::error!("failed to handle upload code event: {err}"), + None => continue, + } + } + }; + } + } + } + } +} + impl Observer { pub async fn new( ethereum_rpc: &str, @@ -51,9 +150,12 @@ impl Observer { blob_reader: Arc, ) -> Result { let (status_sender, _status_receiver) = watch::channel(ObserverStatus::default()); + let provider = ProviderBuilder::new().on_builtin(ethereum_rpc).await?; + let blocks_subscription = provider.subscribe_blocks().await?; Ok(Self { - provider: ProviderBuilder::new().on_builtin(ethereum_rpc).await?, + provider, router_address: AlloyAddress::new(router_address.0), + blocks_subscription: Some(blocks_subscription), blob_reader, status: Default::default(), status_sender, @@ -71,189 +173,51 @@ impl Observer { update_fn(&mut self.status); let _ = self.status_sender.send_replace(self.status); } + pub fn provider(&self) -> &ObserverProvider { &self.provider } - pub fn events_all(&mut self) -> impl Stream + '_ { - async_stream::stream! { - let block_subscription = self - .provider - .subscribe_blocks() - .await - .expect("failed to subscribe to blocks"); - let mut block_stream = block_subscription.into_stream(); - let mut futures = FuturesUnordered::new(); - - loop { - tokio::select! { - block = block_stream.next() => { - let Some(block) = block else { - log::info!("Block stream ended"); - break; - }; - - log::trace!("Received block: {:?}", block.header.hash); - - let block_hash = (*block.header.hash).into(); - let parent_hash = (*block.header.parent_hash).into(); - let block_number = block.header.number; - let block_timestamp = block.header.timestamp; - - let events = match read_block_events(block_hash, &self.provider, self.router_address).await { - Ok(events) => events, - Err(err) => { - log::error!("failed to read events: {err}"); - continue; - } - }; - - let mut codes_len = 0; - - // Create futures to load codes - for event in events.iter() { - if let BlockEvent::Router(RouterEvent::CodeValidationRequested { code_id, blob_tx_hash }) = event { - codes_len += 1; - - let blob_reader = self.blob_reader.clone(); - - let code_id = *code_id; - let blob_tx_hash = *blob_tx_hash; - - futures.push(async move { - let attempts = Some(3); + define_event_stream_method!( + events_all, + read_block_events, + BlockEvent, + RouterEvent, + BlockData, + Event + ); - read_code_from_tx_hash( - blob_reader, - code_id, - blob_tx_hash, - attempts, - ).await - }); - } - } + define_event_stream_method!( + request_events, + read_block_request_events, + BlockRequestEvent, + RouterRequestEvent, + RequestBlockData, + RequestEvent + ); - self.update_status(|status| { - status.eth_block_number = block_number; - if codes_len > 0 { - status.last_router_state = block_number; - } - status.pending_upload_code = codes_len as u64; - }); - - let block_data = BlockData { - hash: block_hash, - header: BlockHeader { - height: block_number as u32, - timestamp: block_timestamp, - parent_hash, - }, - events, - }; - - yield Event::Block(block_data); - }, - future = futures.next(), if !futures.is_empty() => { - match future { - Some(Ok((code_id, code))) => yield Event::CodeLoaded { code_id, code }, - Some(Err(err)) => log::error!("failed to handle upload code event: {err}"), - None => continue, - } - } - }; - } + /// Clones the `Observer` with resubscribing to blocks. + /// + /// Resubscription here is the same as calling provider's `subscibe_blocks` + /// method from the sense of both approaches will result in receiving only new blocks. + /// All the previous blocks queued in the inner channel of the subscription won't be + /// accessible by the new subscription. + pub fn clone_with_resubscribe(&self) -> Self { + Self { + provider: self.provider.clone(), + router_address: self.router_address, + blocks_subscription: Some(self.resubscribe_blocks()), + blob_reader: self.blob_reader.clone(), + status_sender: self.status_sender.clone(), + status: self.status, } } - pub fn request_events(&mut self) -> impl Stream + '_ { - async_stream::stream! { - let block_subscription = self - .provider - .subscribe_blocks() - .await - .expect("failed to subscribe to blocks"); - let mut block_stream = block_subscription.into_stream(); - let mut futures = FuturesUnordered::new(); - - loop { - tokio::select! { - block = block_stream.next() => { - let Some(block) = block else { - log::info!("Block stream ended"); - break; - }; - - log::trace!("Received block: {:?}", block.header.hash); - - let block_hash = (*block.header.hash).into(); - let parent_hash = (*block.header.parent_hash).into(); - let block_number = block.header.number; - let block_timestamp = block.header.timestamp; - - let events = match read_block_request_events(block_hash, &self.provider, self.router_address).await { - Ok(events) => events, - Err(err) => { - log::error!("failed to read events: {err}"); - continue; - } - }; - - let mut codes_len = 0; - - // Create futures to load codes - // TODO (breathx): remove me from here mb - for event in events.iter() { - if let BlockRequestEvent::Router(RouterRequestEvent::CodeValidationRequested { code_id, blob_tx_hash }) = event { - codes_len += 1; - - let blob_reader = self.blob_reader.clone(); - - let code_id = *code_id; - let blob_tx_hash = *blob_tx_hash; - - futures.push(async move { - let attempts = Some(3); - - read_code_from_tx_hash( - blob_reader, - code_id, - blob_tx_hash, - attempts, - ).await - }); - } - } + fn resubscribe_blocks(&self) -> Subscription
{ + // `expect` is called to state the invariant` that `blocks_subscription` is always `Some`. + let subscription_ref = self.blocks_subscription.as_ref().expect("always some"); - self.update_status(|status| { - status.eth_block_number = block_number; - if codes_len > 0 { - status.last_router_state = block_number; - } - status.pending_upload_code = codes_len as u64; - }); - - let block_data = RequestBlockData { - hash: block_hash, - header: BlockHeader { - height: block_number as u32, - timestamp: block_timestamp, - parent_hash, - }, - events, - }; - - yield RequestEvent::Block(block_data); - }, - future = futures.next(), if !futures.is_empty() => { - match future { - Some(Ok((code_id, code))) => yield RequestEvent::CodeLoaded { code_id, code }, - Some(Err(err)) => log::error!("failed to handle upload code event: {err}"), - None => continue, - } - } - }; - } - } + subscription_ref.resubscribe() } } @@ -309,7 +273,7 @@ pub(crate) async fn read_block_events_batch( let to_block = to_block as u64; while start_block <= to_block { - let end_block = to_block.min(start_block + MAX_QUERY_BLOCK_RANGE - 1); + let end_block = to_block.min(start_block + MAX_QUERY_BLOCK_RANGE as u64 - 1); let filter = Filter::new().from_block(start_block).to_block(end_block); @@ -421,8 +385,9 @@ pub(crate) async fn read_block_request_events_batch( let mut start_block = from_block as u64; let to_block = to_block as u64; + // TODO (breathx): FIX WITHIN PR. to iters. while start_block <= to_block { - let end_block = to_block.min(start_block + MAX_QUERY_BLOCK_RANGE - 1); + let end_block = to_block.min(start_block + MAX_QUERY_BLOCK_RANGE as u64 - 1); let filter = Filter::new().from_block(start_block).to_block(end_block); @@ -512,6 +477,54 @@ async fn read_request_events_impl( Ok(res) } +pub(crate) async fn read_committed_blocks_batch( + from_block: u32, + to_block: u32, + provider: &ObserverProvider, + router_address: AlloyAddress, +) -> Result> { + let mut start_block = from_block as u64; + let to_block = to_block as u64; + + let mut res = Vec::new(); + + while start_block <= to_block { + let end_block = to_block.min(start_block + MAX_QUERY_BLOCK_RANGE as u64 - 1); + + let filter = Filter::new().from_block(start_block).to_block(end_block); + + let iter_res = read_committed_blocks_impl(router_address, provider, filter).await?; + + res.extend(iter_res); + + start_block = end_block + 1; + } + + Ok(res) +} + +async fn read_committed_blocks_impl( + router_address: AlloyAddress, + provider: &ObserverProvider, + filter: Filter, +) -> Result> { + let filter = filter + .address(router_address) + .event_signature(Topic::from(router::events::signatures::BLOCK_COMMITTED)); + + let logs = provider.get_logs(&filter).await?; + + let mut res = Vec::with_capacity(logs.len()); + + for log in logs { + if let Some(hash) = router::events::try_extract_committed_block_hash(&log)? { + res.push(hash); + } + } + + Ok(res) +} + #[cfg(test)] mod tests { use std::time::Duration; diff --git a/ethexe/observer/src/query.rs b/ethexe/observer/src/query.rs index 0f7221bacd8..60fd4bc1c7b 100644 --- a/ethexe/observer/src/query.rs +++ b/ethexe/observer/src/query.rs @@ -1,20 +1,16 @@ -use std::{ - collections::{BTreeSet, HashMap, VecDeque}, - sync::Arc, -}; - use crate::{ observer::{ read_block_events, read_block_request_events, read_block_request_events_batch, - read_code_from_tx_hash, ObserverProvider, + read_code_from_tx_hash, read_committed_blocks_batch, ObserverProvider, + MAX_QUERY_BLOCK_RANGE, }, BlobReader, }; use alloy::{ - eips::BlockNumberOrTag, + network::{Ethereum, Network}, primitives::Address as AlloyAddress, providers::{Provider, ProviderBuilder}, - rpc::types::eth::BlockTransactionsKind, + rpc::{client::BatchRequest, types::eth::BlockTransactionsKind}, }; use anyhow::{anyhow, Result}; use ethexe_common::{ @@ -22,7 +18,12 @@ use ethexe_common::{ events::{BlockEvent, BlockRequestEvent, RouterEvent}, }; use ethexe_signer::Address; +use futures::future; use gprimitives::{CodeId, H256}; +use std::{ + collections::{BTreeSet, HashMap, VecDeque}, + sync::Arc, +}; /// Height difference to start fast sync. const DEEP_SYNC: u32 = 10; @@ -95,6 +96,55 @@ impl Query { .collect()) } + async fn batch_get_block_headers( + provider: ObserverProvider, + database: Arc, + from_block: u64, + to_block: u64, + ) -> Result> { + log::debug!("Querying blocks from {from_block} to {to_block}"); + + let mut batch = BatchRequest::new(provider.client()); + + let handles: Vec<_> = (from_block..=to_block) + .map(|bn| { + batch + .add_call::<_, Option<::BlockResponse>>( + "eth_getBlockByNumber", + &(format!("0x{bn:x}"), false), + ) + .expect("infallible") + }) + .collect(); + + batch.send().await?; + + let blocks: Vec<_> = future::join_all(handles).await; + + let mut res = Vec::with_capacity(blocks.len()); + + for block in blocks { + let block = block?.ok_or_else(|| anyhow!("Block not found"))?; + let block_hash = H256(block.header.hash.0); + + let height = block.header.number as u32; + let timestamp = block.header.timestamp; + let parent_hash = H256(block.header.parent_hash.0); + + let header = BlockHeader { + height, + timestamp, + parent_hash, + }; + + database.set_block_header(block_hash, header.clone()); + + res.push((block_hash, header)) + } + + Ok(res) + } + /// Populate database with blocks using rpc provider. async fn load_chain_batch( &mut self, @@ -102,59 +152,52 @@ impl Query { to_block: u32, ) -> Result> { let total_blocks = to_block.saturating_sub(from_block) + 1; - log::info!("Starting to load {total_blocks} blocks from {from_block} to {to_block}"); - let fetches = (from_block..=to_block).map(|block_number| { - let provider = self.provider.clone(); - let database = Arc::clone(&self.database); - tokio::spawn(async move { - let block = provider - .get_block_by_number(BlockNumberOrTag::Number(block_number as u64), false) - .await?; - let block = block - .ok_or_else(|| anyhow!("Block not found for block number {block_number}"))?; - - let height = u32::try_from(block.header.number) - .map_err(|err| anyhow!("Ethereum block number not fit in u32: {err}"))?; - let timestamp = block.header.timestamp; - let block_hash = H256(block.header.hash.0); - let parent_hash = H256(block.header.parent_hash.0); + log::info!("Starting to load {total_blocks} blocks from {from_block} to {to_block}"); - let header = BlockHeader { - height, - timestamp, - parent_hash, - }; + let headers_handles: Vec<_> = (from_block..=to_block) + .step_by(MAX_QUERY_BLOCK_RANGE) + .map(|start| { + let end = (start + MAX_QUERY_BLOCK_RANGE as u32 - 1).min(to_block); - database.set_block_header(block_hash, header.clone()); + let provider = self.provider.clone(); + let database = self.database.clone(); - Ok::<(H256, BlockHeader), anyhow::Error>((block_hash, header)) + tokio::spawn(async move { + Self::batch_get_block_headers(provider, database, start as u64, end as u64) + .await + }) }) - }); + .collect(); + + let headers_fut = future::join_all(headers_handles); - // Fetch events in block range. - let mut blocks_events = read_block_request_events_batch( + let events_fut = read_block_request_events_batch( from_block, to_block, &self.provider, self.router_address, - ) - .await?; + ); + + let (headers_batches, maybe_events) = future::join(headers_fut, events_fut).await; + let mut events = maybe_events?; + + let mut res = HashMap::with_capacity(total_blocks as usize); - // Collect results - let mut block_headers = HashMap::new(); - for result in futures::future::join_all(fetches).await { - let (block_hash, header) = result??; - // Set block events, empty vec if no events. - self.database.set_block_events( - block_hash, - blocks_events.remove(&block_hash).unwrap_or_default(), - ); - block_headers.insert(block_hash, header); + for batch in headers_batches { + let batch = batch??; + + for (hash, header) in batch { + self.database + .set_block_events(hash, events.remove(&hash).unwrap_or_default()); + + res.insert(hash, header); + } } - log::trace!("{} blocks loaded", block_headers.len()); - Ok(block_headers) + log::trace!("{} blocks loaded", res.len()); + + Ok(res) } pub async fn get_last_committed_chain(&mut self, block_hash: H256) -> Result> { @@ -186,9 +229,16 @@ impl Query { }; let mut chain = Vec::new(); - let mut committed_blocks = Vec::new(); let mut headers_map = HashMap::new(); + let committed_blocks = read_committed_blocks_batch( + latest_valid_block_height + 1, + current_block.height, + &self.provider, + self.router_address, + ) + .await?; + if is_deep_sync { // Load blocks in batch from provider by numbers. headers_map = self @@ -218,7 +268,6 @@ impl Query { } log::trace!("Include block {hash} in chain for processing"); - committed_blocks.extend(self.get_committed_blocks(hash).await?); chain.push(hash); // Fetch parent hash from headers_map or database diff --git a/ethexe/processor/src/handling/events.rs b/ethexe/processor/src/handling/events.rs index 23f43b4e3de..5d22ee2fc99 100644 --- a/ethexe/processor/src/handling/events.rs +++ b/ethexe/processor/src/handling/events.rs @@ -47,7 +47,7 @@ impl ProcessingHandler { RouterRequestEvent::CodeValidationRequested { .. } | RouterRequestEvent::ComputationSettingsChanged { .. } | RouterRequestEvent::StorageSlotChanged - | RouterRequestEvent::ValidatorsChanged => { + | RouterRequestEvent::NextEraValidatorsCommitted { .. } => { log::debug!("Handler not yet implemented: {event:?}"); } }; diff --git a/ethexe/processor/src/host/mod.rs b/ethexe/processor/src/host/mod.rs index 822b7b9498e..7e2411508d5 100644 --- a/ethexe/processor/src/host/mod.rs +++ b/ethexe/processor/src/host/mod.rs @@ -141,7 +141,17 @@ impl InstanceWrapper { maybe_instrumented_code, ); - self.call("run", arg.encode()) + // Peaces of resulting journal. Hack to avoid single allocation limit. + let ptr_lens: Vec = self.call("run", arg.encode())?; + + let mut journal = Vec::new(); + + for ptr_len in ptr_lens { + let journal_chunk: Vec = self.get_call_output(ptr_len)?; + journal.extend(journal_chunk); + } + + Ok(journal) } fn call(&mut self, name: &'static str, input: impl AsRef<[u8]>) -> Result { diff --git a/ethexe/processor/src/host/threads.rs b/ethexe/processor/src/host/threads.rs index 1f2370f01ef..5aab0d896f3 100644 --- a/ethexe/processor/src/host/threads.rs +++ b/ethexe/processor/src/host/threads.rs @@ -22,7 +22,10 @@ use crate::Database; use core::fmt; use ethexe_db::BlockMetaStorage; use ethexe_runtime_common::{ - state::{ActiveProgram, HashOf, Program, ProgramState, Storage}, + state::{ + ActiveProgram, HashOf, MemoryPages, MemoryPagesInner, MemoryPagesRegionInner, Program, + ProgramState, RegionIdx, Storage, + }, BlockInfo, }; use gear_core::{ids::ProgramId, memory::PageBuf, pages::GearPage}; @@ -42,7 +45,8 @@ pub struct ThreadParams { pub db: Database, pub block_info: BlockInfo, pub state_hash: H256, - pub pages: Option>>, + pages_registry_cache: Option, + pages_regions_cache: Option>, } impl fmt::Debug for ThreadParams { @@ -52,19 +56,38 @@ impl fmt::Debug for ThreadParams { } impl ThreadParams { - pub fn pages(&mut self) -> &BTreeMap> { - self.pages.get_or_insert_with(|| { + pub fn get_page_region( + &mut self, + page: GearPage, + ) -> Option<&BTreeMap>> { + let pages_registry = self.pages_registry_cache.get_or_insert_with(|| { let ProgramState { program: Program::Active(ActiveProgram { pages_hash, .. }), .. } = self.db.read_state(self.state_hash).expect(UNKNOWN_STATE) else { - // TODO: consider me. - panic!("Couldn't get pages hash for inactive program!") + unreachable!("program that is currently running can't be inactive"); }; pages_hash.query(&self.db).expect(UNKNOWN_STATE).into() - }) + }); + + let region_idx = MemoryPages::page_region(page); + + let region_hash = pages_registry.get(®ion_idx)?; + + let pages_regions = self + .pages_regions_cache + .get_or_insert_with(Default::default); + + let page_region = pages_regions.entry(region_idx).or_insert_with(|| { + self.db + .read_pages_region(*region_hash) + .expect("Pages region not found") + .into() + }); + + Some(&*page_region) } } @@ -92,11 +115,11 @@ pub fn set(db: Database, chain_head: H256, state_hash: H256) { timestamp: header.timestamp, }, state_hash, - pages: None, + pages_registry_cache: None, + pages_regions_cache: None, })) } -// TODO: consider Database mutability. pub fn with_db(f: impl FnOnce(&Database) -> T) -> T { PARAMS.with_borrow(|v| { let params = v.as_ref().expect(UNSET_PANIC); @@ -113,16 +136,6 @@ pub fn chain_head_info() -> BlockInfo { }) } -// TODO: consider Database mutability. -#[allow(unused)] -pub fn with_db_and_state_hash(f: impl FnOnce(&Database, H256) -> T) -> T { - PARAMS.with_borrow(|v| { - let params = v.as_ref().expect(UNSET_PANIC); - - f(¶ms.db, params.state_hash) - }) -} - pub fn with_params(f: impl FnOnce(&mut ThreadParams) -> T) -> T { PARAMS.with_borrow_mut(|v| { let params = v.as_mut().expect(UNSET_PANIC); @@ -139,7 +152,7 @@ impl LazyPagesStorage for EthexeHostLazyPages { with_params(|params| { let page = PageKey::page_from_buf(key); - let page_hash = params.pages().get(&page).cloned()?; + let page_hash = params.get_page_region(page)?.get(&page).cloned()?; let data = params.db.read_page_data(page_hash).expect("Page not found"); @@ -153,7 +166,10 @@ impl LazyPagesStorage for EthexeHostLazyPages { with_params(|params| { let page = PageKey::page_from_buf(key); - params.pages().contains_key(&page) + params + .get_page_region(page) + .map(|region| region.contains_key(&page)) + .unwrap_or(false) }) } } diff --git a/ethexe/rpc/Cargo.toml b/ethexe/rpc/Cargo.toml index f1f9e2ab0b5..90ba2394201 100644 --- a/ethexe/rpc/Cargo.toml +++ b/ethexe/rpc/Cargo.toml @@ -17,9 +17,10 @@ gprimitives = { workspace = true, features = ["serde"] } ethexe-db.workspace = true ethexe-processor.workspace = true ethexe-tx-pool.workspace = true -jsonrpsee = { version = "0.24", features = ["server", "macros"] } -tower = { version = "0.4.13", features = ["full"] } -hyper = { version = "1.4.1", features = ["server"] } +tower = { workspace = true, features = ["util"] } +tower-http = { workspace = true, features = ["cors"] } +jsonrpsee = { workspace = true, features = ["server", "macros"] } +hyper = { workspace = true, features = ["server"] } log.workspace = true parity-scale-codec.workspace = true hex.workspace = true diff --git a/ethexe/rpc/src/lib.rs b/ethexe/rpc/src/lib.rs index e30780fac46..aa1e20f10b0 100644 --- a/ethexe/rpc/src/lib.rs +++ b/ethexe/rpc/src/lib.rs @@ -16,10 +16,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use anyhow::anyhow; -use apis::{ - BlockApi, BlockServer, ProgramApi, ProgramServer, TransactionPoolApi, TransactionPoolServer, -}; +use anyhow::{anyhow, Result}; +use apis::{BlockApi, BlockServer, ProgramApi, ProgramServer, TransactionPoolApi, TransactionPoolServer,}; use ethexe_db::Database; use futures::FutureExt; use jsonrpsee::{ @@ -37,6 +35,8 @@ mod apis; mod common; mod errors; +pub(crate) mod util; + #[derive(Clone)] struct PerConnection { methods: Methods, @@ -49,6 +49,8 @@ struct PerConnection { pub struct RpcConfig { /// Listen address. pub listen_addr: SocketAddr, + /// CORS. + pub cors: Option>, } pub struct RpcService { @@ -74,10 +76,17 @@ impl RpcService { self.config.listen_addr.port() } - pub async fn run_server(self) -> anyhow::Result { + pub async fn run_server(self) -> Result { let listener = TcpListener::bind(self.config.listen_addr).await?; - let service_builder = Server::builder().to_service_builder(); + let cors = util::try_into_cors(self.config.cors)?; + + let http_middleware = tower::ServiceBuilder::new().layer(cors); + + let service_builder = Server::builder() + .set_http_middleware(http_middleware) + .to_service_builder(); + let mut module = JsonrpcModule::new(()); module.merge(ProgramServer::into_rpc(ProgramApi::new(self.db.clone())))?; module.merge(BlockServer::into_rpc(BlockApi::new(self.db.clone())))?; diff --git a/ethexe/rpc/src/util.rs b/ethexe/rpc/src/util.rs new file mode 100644 index 00000000000..8236795c701 --- /dev/null +++ b/ethexe/rpc/src/util.rs @@ -0,0 +1,36 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use anyhow::Result; +use hyper::header::HeaderValue; +use tower_http::cors::{AllowOrigin, CorsLayer}; + +pub(crate) fn try_into_cors(maybe_cors: Option>) -> Result { + if let Some(cors) = maybe_cors { + let mut list = Vec::new(); + + for origin in cors { + list.push(HeaderValue::from_str(&origin)?) + } + + Ok(CorsLayer::new().allow_origin(AllowOrigin::list(list))) + } else { + // allow all cors + Ok(CorsLayer::permissive()) + } +} diff --git a/ethexe/runtime/common/src/journal.rs b/ethexe/runtime/common/src/journal.rs index 99bbf56f7a6..c6fafedfc6a 100644 --- a/ethexe/runtime/common/src/journal.rs +++ b/ethexe/runtime/common/src/journal.rs @@ -1,31 +1,21 @@ use crate::{ - state::{ - self, ActiveProgram, Dispatch, MaybeHashOf, Program, ProgramState, Storage, - ValueWithExpiry, MAILBOX_VALIDITY, - }, - InBlockTransitions, TransitionController, + state::{ActiveProgram, Dispatch, Program, Storage, ValueWithExpiry, MAILBOX_VALIDITY}, + TransitionController, }; -use alloc::{collections::BTreeMap, vec, vec::Vec}; -use anyhow::{bail, Result}; +use alloc::{collections::BTreeMap, vec::Vec}; +use anyhow::bail; use core::{mem, num::NonZero}; -use core_processor::{ - common::{DispatchOutcome, JournalHandler}, - configs::BlockInfo, -}; +use core_processor::common::{DispatchOutcome, JournalHandler}; use ethexe_common::db::ScheduledTask; use gear_core::{ ids::ProgramId, memory::PageBuf, - message::{ - Dispatch as CoreDispatch, Message, MessageWaitedType, Payload, StoredDispatch, - StoredMessage, - }, + message::{Dispatch as CoreDispatch, MessageWaitedType, StoredDispatch}, pages::{numerated::tree::IntervalsTree, GearPage, WasmPage}, - program::ProgramState as InitStatus, reservation::GasReserver, }; use gear_core_errors::SignalCode; -use gprimitives::{ActorId, CodeId, MessageId, ReservationId, H256}; +use gprimitives::{ActorId, CodeId, MessageId, ReservationId}; #[derive(derive_more::Deref, derive_more::DerefMut)] pub struct Handler<'a, S: Storage> { @@ -38,7 +28,7 @@ pub struct Handler<'a, S: Storage> { impl Handler<'_, S> { fn send_dispatch_to_program( &mut self, - message_id: MessageId, + _message_id: MessageId, destination: ActorId, dispatch: Dispatch, delay: u32, @@ -63,7 +53,7 @@ impl Handler<'_, S> { fn send_dispatch_to_user( &mut self, - message_id: MessageId, + _message_id: MessageId, dispatch: StoredDispatch, delay: u32, ) { @@ -122,12 +112,12 @@ impl JournalHandler for Handler<'_, S> { fn message_dispatched( &mut self, message_id: MessageId, - source: ProgramId, + _source: ProgramId, outcome: DispatchOutcome, ) { match outcome { DispatchOutcome::Exit { program_id } => { - log::trace!("Dispatch outcome exit: {message_id}") + log::trace!("Dispatch outcome exit: {message_id} for program {program_id}") } DispatchOutcome::InitSuccess { program_id } => { @@ -146,7 +136,8 @@ impl JournalHandler for Handler<'_, S> { }; Ok(()) - }); + }) + .expect("failed to update state"); } DispatchOutcome::InitFailure { @@ -172,7 +163,7 @@ impl JournalHandler for Handler<'_, S> { } } - fn gas_burned(&mut self, message_id: MessageId, amount: u64) { + fn gas_burned(&mut self, _message_id: MessageId, _amount: u64) { // TODO // unreachable!("Must not be called here") } @@ -240,7 +231,7 @@ impl JournalHandler for Handler<'_, S> { &mut self, dispatch: StoredDispatch, duration: Option, - waited_type: MessageWaitedType, + _waited_type: MessageWaitedType, ) { let Some(duration) = duration else { todo!("Wait dispatch without specified duration"); @@ -332,11 +323,12 @@ impl JournalHandler for Handler<'_, S> { }; pages_hash.modify_pages(storage, |pages| { - pages.update(storage.write_pages_data(pages_data)); + pages.update_and_store_regions(storage, storage.write_pages_data(pages_data)); }); Ok(()) - }); + }) + .expect("failed to update state"); } fn update_allocations( @@ -359,13 +351,14 @@ impl JournalHandler for Handler<'_, S> { if !removed_pages.is_empty() { pages_hash.modify_pages(storage, |pages| { - pages.remove(&removed_pages); + pages.remove_and_store_regions(storage, &removed_pages); }) } }); Ok(()) - }); + }) + .expect("failed to update state"); } fn send_value(&mut self, from: ProgramId, to: Option, value: u128) { @@ -393,7 +386,7 @@ impl JournalHandler for Handler<'_, S> { todo!() } - fn stop_processing(&mut self, dispatch: StoredDispatch, gas_burned: u64) { + fn stop_processing(&mut self, _dispatch: StoredDispatch, _gas_burned: u64) { todo!() } diff --git a/ethexe/runtime/common/src/lib.rs b/ethexe/runtime/common/src/lib.rs index cafbb52a661..c9af5daa61a 100644 --- a/ethexe/runtime/common/src/lib.rs +++ b/ethexe/runtime/common/src/lib.rs @@ -19,38 +19,24 @@ //! Runtime common implementation. #![cfg_attr(not(feature = "std"), no_std)] -#![allow(unused)] extern crate alloc; -use alloc::{ - collections::{BTreeMap, VecDeque}, - vec::Vec, -}; -use anyhow::Result; -use core::{marker::PhantomData, mem::swap}; +use alloc::vec::Vec; use core_processor::{ common::{ExecutableActorData, JournalNote}, configs::{BlockConfig, SyscallName}, ContextChargedForCode, ContextChargedForInstrumentation, Ext, ProcessExecutionContext, }; use gear_core::{ - code::InstrumentedCode, + code::{InstrumentedCode, MAX_WASM_PAGES_AMOUNT}, ids::ProgramId, - memory::PageBuf, - message::{DispatchKind, IncomingDispatch, IncomingMessage, Value}, - pages::{numerated::tree::IntervalsTree, GearPage, WasmPage}, - program::MemoryInfix, - reservation::GasReservationMap, + message::{DispatchKind, IncomingDispatch, IncomingMessage}, }; use gear_lazy_pages_common::LazyPagesInterface; -use gprimitives::{CodeId, H256}; +use gprimitives::CodeId; use gsys::{GasMultiplier, Percent}; -use parity_scale_codec::{Decode, Encode}; -use state::{ - ActiveProgram, Dispatch, HashOf, InitStatus, MaybeHashOf, MessageQueue, ProgramState, Storage, - Waitlist, -}; +use state::{Dispatch, ProgramState, Storage}; pub use core_processor::configs::BlockInfo; pub use journal::Handler as JournalHandler; @@ -65,13 +51,13 @@ mod transitions; pub const BLOCK_GAS_LIMIT: u64 = 1_000_000_000_000; -const RUNTIME_ID: u32 = 0; +pub const RUNTIME_ID: u32 = 0; pub trait RuntimeInterface { type LazyPages: LazyPagesInterface + 'static; fn block_info(&self) -> BlockInfo; - fn init_lazy_pages(&self, pages_map: BTreeMap>); + fn init_lazy_pages(&self); fn random_data(&self) -> (Vec, u32); fn storage(&self) -> &S; } @@ -136,7 +122,6 @@ where // TODO: must be set by some runtime configuration let block_config = BlockConfig { block_info, - performance_multiplier: Percent::new(100), forbidden_funcs: [ // Deprecated SyscallName::CreateProgramWGas, @@ -162,15 +147,18 @@ where SyscallName::Random, ] .into(), - reserve_for: 125_000_000, - gas_multiplier: GasMultiplier::one(), // TODO - costs: Default::default(), // TODO - existential_deposit: 0, // TODO - mailbox_threshold: 3000, - max_reservations: 50, - max_pages: 512.into(), + gas_multiplier: GasMultiplier::one(), + costs: Default::default(), + max_pages: MAX_WASM_PAGES_AMOUNT.into(), outgoing_limit: 1024, outgoing_bytes_limit: 64 * 1024 * 1024, + // TBD about deprecation + performance_multiplier: Percent::new(100), + // Deprecated + existential_deposit: 0, + mailbox_threshold: 0, + max_reservations: 0, + reserve_for: 0, }; let active_state = match program_state.program { @@ -246,11 +234,6 @@ where Err(journal) => return journal, }; - let pages_map = active_state.pages_hash.with_hash_or_default(|hash| { - ri.storage() - .read_pages(hash) - .expect("Cannot get memory pages") - }); let actor_data = ExecutableActorData { allocations: allocations.into(), code_id, @@ -281,7 +264,7 @@ where let random_data = ri.random_data(); - ri.init_lazy_pages(pages_map.into()); + ri.init_lazy_pages(); core_processor::process::>(&block_config, execution_context, random_data) .unwrap_or_else(|err| unreachable!("{err}")) diff --git a/ethexe/runtime/common/src/schedule.rs b/ethexe/runtime/common/src/schedule.rs index e8e4d854900..e996aed82ec 100644 --- a/ethexe/runtime/common/src/schedule.rs +++ b/ethexe/runtime/common/src/schedule.rs @@ -1,19 +1,14 @@ use crate::{ - state::{ - Dispatch, MaybeHashOf, PayloadLookup, ProgramState, Storage, ValueWithExpiry, - MAILBOX_VALIDITY, - }, - InBlockTransitions, TransitionController, + state::{Dispatch, PayloadLookup, Storage, ValueWithExpiry, MAILBOX_VALIDITY}, + TransitionController, }; -use alloc::vec; -use anyhow::{anyhow, Result}; use ethexe_common::{ db::{Rfm, ScheduledTask, Sd, Sum}, - gear::{Message, ValueClaim}, + gear::ValueClaim, }; -use gear_core::{ids::ProgramId, message::ReplyMessage, tasks::TaskHandler}; +use gear_core::{ids::ProgramId, tasks::TaskHandler}; use gear_core_errors::SuccessReplyReason; -use gprimitives::{ActorId, CodeId, MessageId, ReservationId, H256}; +use gprimitives::{ActorId, CodeId, MessageId, ReservationId}; #[derive(derive_more::Deref, derive_more::DerefMut)] pub struct Handler<'a, S: Storage> { @@ -27,7 +22,7 @@ impl<'a, S: Storage> TaskHandler for Handler<'a, S> { message_id: MessageId, ) -> u64 { self.update_state(program_id, |state, storage, transitions| { - let ValueWithExpiry { value, expiry } = + let ValueWithExpiry { value, .. } = state.mailbox_hash.modify_mailbox(storage, |mailbox| { mailbox .remove(user_id, message_id) diff --git a/ethexe/runtime/common/src/state.rs b/ethexe/runtime/common/src/state.rs index 7faea2b6172..596add3a492 100644 --- a/ethexe/runtime/common/src/state.rs +++ b/ethexe/runtime/common/src/state.rs @@ -25,29 +25,19 @@ use alloc::{ vec::Vec, }; use anyhow::{anyhow, Result}; -use core::{ - any::Any, - marker::PhantomData, - mem, - num::NonZero, - ops::{Deref, DerefMut}, -}; +use core::{any::Any, marker::PhantomData, mem}; use ethexe_common::gear::Message; use gear_core::{ - code::InstrumentedCode, ids::{prelude::MessageIdExt as _, ProgramId}, memory::PageBuf, message::{ - ContextStore, DispatchKind, GasLimit, MessageDetails, Payload, ReplyDetails, - StoredDispatch, Value, MAX_PAYLOAD_SIZE, + ContextStore, DispatchKind, MessageDetails, Payload, ReplyDetails, StoredDispatch, Value, }, pages::{numerated::tree::IntervalsTree, GearPage, WasmPage}, program::MemoryInfix, - reservation::GasReservationMap, }; use gear_core_errors::{ReplyCode, SuccessReplyReason}; -use gprimitives::{ActorId, CodeId, MessageId, H256}; -use gsys::BlockNumber; +use gprimitives::{ActorId, MessageId, H256}; use parity_scale_codec::{Decode, Encode}; use private::Sealed; @@ -65,6 +55,7 @@ mod private { impl Sealed for DispatchStash {} impl Sealed for Mailbox {} impl Sealed for MemoryPages {} + impl Sealed for MemoryPagesRegion {} impl Sealed for MessageQueue {} impl Sealed for Payload {} impl Sealed for PageBuf {} @@ -592,7 +583,7 @@ impl Dispatch { pub fn from_stored(storage: &S, value: StoredDispatch) -> Self { let (kind, message, context) = value.into_parts(); - let (id, source, destination, payload, value, details) = message.into_parts(); + let (id, source, _destination, payload, value, details) = message.into_parts(); let payload = storage .write_payload_raw(payload.into_vec()) @@ -739,7 +730,7 @@ impl DispatchStash { pub fn remove_to_program(&mut self, message_id: &MessageId) -> Dispatch { let ValueWithExpiry { value: (dispatch, user_id), - expiry, + .. } = self .0 .remove(message_id) @@ -755,7 +746,7 @@ impl DispatchStash { pub fn remove_to_user(&mut self, message_id: &MessageId) -> (Dispatch, ActorId) { let ValueWithExpiry { value: (dispatch, user_id), - expiry, + .. } = self .0 .remove(message_id) @@ -823,18 +814,111 @@ impl Mailbox { #[derive(Clone, Default, Debug, Encode, Decode, PartialEq, Eq, derive_more::Into)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct MemoryPages(BTreeMap>); +pub struct MemoryPages(MemoryPagesInner); + +// TODO (breathx): replace BTreeMap here with fixed size array. +pub type MemoryPagesInner = BTreeMap>; impl MemoryPages { - pub fn update(&mut self, new_pages: BTreeMap>) { + /// Granularity parameter of how memory pages hashes are stored. + /// + /// Instead of a single huge map of GearPage to HashOf, memory is + /// stored in page regions. Each region represents the same map, + /// but with a specific range of GearPage as keys. + /// + /// # Safety + /// Be careful adjusting this value, as it affects the storage invariants. + /// In case of a change, not only should the database be migrated, but + /// necessary changes should also be applied in the ethexe lazy pages + /// host implementation: see the `ThreadParams` struct. + pub const REGIONS_AMOUNT: usize = 16; + + pub fn page_region(page: GearPage) -> RegionIdx { + RegionIdx((u32::from(page) as usize / Self::REGIONS_AMOUNT) as u8) + } + + pub fn update_and_store_regions( + &mut self, + storage: &S, + new_pages: BTreeMap>, + ) { + let mut updated_regions = BTreeMap::new(); + + let mut current_region_idx = None; + let mut current_region_entry = None; + for (page, data) in new_pages { - self.0.insert(page, data); + let region_idx = Self::page_region(page); + + if current_region_idx != Some(region_idx) { + let region_entry = updated_regions.entry(region_idx).or_insert_with(|| { + self.0 + .remove(®ion_idx) + .map(|region_hash| { + storage + .read_pages_region(region_hash) + .expect("failed to read region from storage") + }) + .unwrap_or_default() + }); + + current_region_idx = Some(region_idx); + current_region_entry = Some(region_entry); + } + + current_region_entry + .as_mut() + .expect("infallible; inserted above") + .0 + .insert(page, data); + } + + for (region_idx, region) in updated_regions { + let region_hash = region + .store(storage) + .hash() + .expect("infallible; pages are only appended here, none are removed"); + + self.0.insert(region_idx, region_hash); } } - pub fn remove(&mut self, pages: &Vec) { + pub fn remove_and_store_regions(&mut self, storage: &S, pages: &Vec) { + let mut updated_regions = BTreeMap::new(); + + let mut current_region_idx = None; + let mut current_region_entry = None; + for page in pages { - self.0.remove(page); + let region_idx = Self::page_region(*page); + + if current_region_idx != Some(region_idx) { + let region_entry = updated_regions.entry(region_idx).or_insert_with(|| { + self.0 + .remove(®ion_idx) + .map(|region_hash| { + storage + .read_pages_region(region_hash) + .expect("failed to read region from storage") + }) + .unwrap_or_default() + }); + + current_region_idx = Some(region_idx); + current_region_entry = Some(region_entry); + } + + current_region_entry + .as_mut() + .expect("infallible; inserted above") + .0 + .remove(page); + } + + for (region_idx, region) in updated_regions { + if let Some(region_hash) = region.store(storage).hash() { + self.0.insert(region_idx, region_hash); + } } } @@ -843,6 +927,22 @@ impl MemoryPages { } } +#[derive(Clone, Default, Debug, Encode, Decode, PartialEq, Eq, derive_more::Into)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub struct MemoryPagesRegion(MemoryPagesRegionInner); + +pub type MemoryPagesRegionInner = BTreeMap>; + +impl MemoryPagesRegion { + pub fn store(self, storage: &S) -> MaybeHashOf { + MaybeHashOf((!self.0.is_empty()).then(|| storage.write_pages_region(self))) + } +} + +#[derive(Clone, Copy, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, derive_more::Into)] +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +pub struct RegionIdx(u8); + #[derive(Default, Debug, Encode, Decode, PartialEq, Eq, derive_more::Into)] pub struct Allocations { inner: IntervalsTree, @@ -857,8 +957,6 @@ impl Allocations { } pub fn update(&mut self, allocations: IntervalsTree) -> Vec { - let len = self.tree_len(); - let removed_pages: Vec<_> = self .inner .difference(&allocations) @@ -919,9 +1017,15 @@ pub trait Storage { /// Reads memory pages by pages hash. fn read_pages(&self, hash: HashOf) -> Option; + /// Writes memory pages region and returns its hash. + fn read_pages_region(&self, hash: HashOf) -> Option; + /// Writes memory pages and returns its hash. fn write_pages(&self, pages: MemoryPages) -> HashOf; + /// Writes memory pages region and returns its hash. + fn write_pages_region(&self, pages_region: MemoryPagesRegion) -> HashOf; + /// Reads allocations by allocations hash. fn read_allocations(&self, hash: HashOf) -> Option; diff --git a/ethexe/runtime/common/src/transitions.rs b/ethexe/runtime/common/src/transitions.rs index 36589164fde..b7b77789f6f 100644 --- a/ethexe/runtime/common/src/transitions.rs +++ b/ethexe/runtime/common/src/transitions.rs @@ -26,8 +26,7 @@ use ethexe_common::{ db::{BlockHeader, Schedule, ScheduledTask}, gear::{Message, StateTransition, ValueClaim}, }; -use gprimitives::{ActorId, CodeId, H256}; -use parity_scale_codec::{Decode, Encode}; +use gprimitives::{ActorId, H256}; #[derive(Debug, Default)] pub struct InBlockTransitions { diff --git a/ethexe/runtime/src/wasm/api/mod.rs b/ethexe/runtime/src/wasm/api/mod.rs index 109a11dea10..decffaaff5f 100644 --- a/ethexe/runtime/src/wasm/api/mod.rs +++ b/ethexe/runtime/src/wasm/api/mod.rs @@ -46,13 +46,18 @@ fn _run(arg_ptr: i32, arg_len: i32) -> i64 { let (program_id, original_code_id, state_root, maybe_instrumented_code) = Decode::decode(&mut get_slice(arg_ptr, arg_len)).unwrap(); - let res = run::run( + let journal = run::run( program_id, original_code_id, state_root, maybe_instrumented_code, ); + let chunks = journal.encoded_size() / 32 * 1024 * 1024 + 1; // never zero + let chunk_size = (journal.len() / chunks).max(1); // never zero + + let res: Vec<_> = journal.chunks(chunk_size).map(return_val).collect(); + return_val(res) } diff --git a/ethexe/runtime/src/wasm/storage.rs b/ethexe/runtime/src/wasm/storage.rs index 855c58fe128..d9edf94ffc9 100644 --- a/ethexe/runtime/src/wasm/storage.rs +++ b/ethexe/runtime/src/wasm/storage.rs @@ -17,16 +17,16 @@ // along with this program. If not, see . use super::interface::database_ri; -use alloc::{collections::BTreeMap, vec::Vec}; +use alloc::vec::Vec; use core_processor::configs::BlockInfo; use ethexe_runtime_common::{ state::{ - Allocations, DispatchStash, HashOf, Mailbox, MemoryPages, MessageQueue, ProgramState, - Storage, Waitlist, + Allocations, DispatchStash, HashOf, Mailbox, MemoryPages, MemoryPagesRegion, MessageQueue, + ProgramState, Storage, Waitlist, }, RuntimeInterface, }; -use gear_core::{memory::PageBuf, message::Payload, pages::GearPage}; +use gear_core::{memory::PageBuf, message::Payload}; use gear_lazy_pages_interface::{LazyPagesInterface, LazyPagesRuntimeInterface}; use gprimitives::H256; @@ -35,7 +35,11 @@ pub struct RuntimeInterfaceStorage; impl Storage for RuntimeInterfaceStorage { fn read_state(&self, hash: H256) -> Option { - database_ri::read_unwrapping(&hash) + if hash.is_zero() { + Some(ProgramState::zero()) + } else { + database_ri::read_unwrapping(&hash) + } } fn write_state(&self, state: ProgramState) -> H256 { @@ -82,10 +86,18 @@ impl Storage for RuntimeInterfaceStorage { database_ri::read_unwrapping(&hash.hash()) } + fn read_pages_region(&self, hash: HashOf) -> Option { + database_ri::read_unwrapping(&hash.hash()) + } + fn write_pages(&self, pages: MemoryPages) -> HashOf { unsafe { HashOf::new(database_ri::write(pages)) } } + fn write_pages_region(&self, pages_region: MemoryPagesRegion) -> HashOf { + unsafe { HashOf::new(database_ri::write(pages_region)) } + } + fn read_allocations(&self, hash: HashOf) -> Option { database_ri::read_unwrapping(&hash.hash()) } @@ -125,7 +137,7 @@ impl RuntimeInterface for NativeRuntimeInterface { self.block_info } - fn init_lazy_pages(&self, _: BTreeMap>) { + fn init_lazy_pages(&self) { assert!(Self::LazyPages::try_to_enable_lazy_pages(Default::default())) } diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index fc07995c872..9970c522280 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -195,7 +195,7 @@ impl Signer { #[cfg(test)] mod tests { use super::*; - use alloy::primitives::{keccak256, Signature as AlloySignature}; + use alloy::primitives::{keccak256, PrimitiveSignature as AlloySignature}; use gprimitives::ActorId; use std::env::temp_dir; diff --git a/galloc/Cargo.toml b/galloc/Cargo.toml index ef4a469f7c9..b20b18870f7 100644 --- a/galloc/Cargo.toml +++ b/galloc/Cargo.toml @@ -3,10 +3,12 @@ name = "galloc" description = "Gear Wasm allocator" documentation = "https://docs.rs/galloc" keywords = ["gear", "allocator", "wasm"] +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true rust-version.workspace = true [dependencies] diff --git a/gbuiltins/bls381/Cargo.toml b/gbuiltins/bls381/Cargo.toml index 7a9f5236a55..21f84606a83 100644 --- a/gbuiltins/bls381/Cargo.toml +++ b/gbuiltins/bls381/Cargo.toml @@ -1,10 +1,14 @@ [package] name = "gbuiltin-bls381" description = "Entities for working with Gear builtin actor providing bls12_381 cryptography" +documentation = "https://docs.rs/gbuiltin-bls381" version.workspace = true authors.workspace = true edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true +rust-version.workspace = true [dependencies] codec = { workspace = true, features = ["derive"] } diff --git a/gbuiltins/eth-bridge/Cargo.toml b/gbuiltins/eth-bridge/Cargo.toml index f5b83ce16e4..7f5b89bc189 100644 --- a/gbuiltins/eth-bridge/Cargo.toml +++ b/gbuiltins/eth-bridge/Cargo.toml @@ -1,10 +1,14 @@ [package] name = "gbuiltin-eth-bridge" description = "Entities for working with Gear builtin actor providing `pallet-gear-eth-bridge` interface" +documentation = "https://docs.rs/gbuiltin-eth-bridge" version.workspace = true authors.workspace = true edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true +rust-version.workspace = true [dependencies] parity-scale-codec = { workspace = true, features = ["derive"] } diff --git a/gbuiltins/proxy/Cargo.toml b/gbuiltins/proxy/Cargo.toml index 8631097c686..4afd4b9ff35 100644 --- a/gbuiltins/proxy/Cargo.toml +++ b/gbuiltins/proxy/Cargo.toml @@ -1,12 +1,14 @@ [package] name = "gbuiltin-proxy" description = "Types and traits to interact with proxy builtin actor." +documentation = "https://docs.rs/gbuiltin-proxy" version.workspace = true authors.workspace = true edition.workspace = true license.workspace = true homepage.workspace = true repository.workspace = true +rust-version.workspace = true [dependencies] parity-scale-codec = { workspace = true, features = ["derive"] } diff --git a/gbuiltins/staking/Cargo.toml b/gbuiltins/staking/Cargo.toml index 71860b4b882..ff8146acc48 100644 --- a/gbuiltins/staking/Cargo.toml +++ b/gbuiltins/staking/Cargo.toml @@ -1,12 +1,14 @@ [package] name = "gbuiltin-staking" description = "Types and traits to interact with staking builtin actor." +documentation = "https://docs.rs/gbuiltin-staking" version.workspace = true authors.workspace = true edition.workspace = true license.workspace = true homepage.workspace = true repository.workspace = true +rust-version.workspace = true [dependencies] parity-scale-codec = { workspace = true, features = ["derive"] } diff --git a/gcore/Cargo.toml b/gcore/Cargo.toml index e16b5a2531c..e9ce97322b1 100644 --- a/gcore/Cargo.toml +++ b/gcore/Cargo.toml @@ -2,10 +2,12 @@ name = "gcore" description = "Gear programs core library" documentation = "https://docs.rs/gcore" +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true rust-version.workspace = true [dependencies] diff --git a/gcore/src/utils.rs b/gcore/src/utils.rs index ef0ca267c43..9e3009f202d 100644 --- a/gcore/src/utils.rs +++ b/gcore/src/utils.rs @@ -38,12 +38,14 @@ impl AsRawPtr for ReservationId {} /// Extensions for additional features. pub mod ext { - use crate::stack_buffer; - use core::{ - fmt::{self, Write as _}, - mem::MaybeUninit, + #[cfg(any(feature = "debug", debug_assertions))] + use { + crate::stack_buffer::{self, MAX_BUFFER_SIZE}, + core::{ + fmt::{self, Write as _}, + mem::MaybeUninit, + }, }; - use gear_stack_buffer::MAX_BUFFER_SIZE; /// Add a `data` string to the debug log. /// diff --git a/gprimitives/Cargo.toml b/gprimitives/Cargo.toml index 2ed05cdb8e2..1fd238aa5a8 100644 --- a/gprimitives/Cargo.toml +++ b/gprimitives/Cargo.toml @@ -2,10 +2,12 @@ name = "gprimitives" description = "Gear programs' primitives" documentation = "https://docs.rs/gprimitives" +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true rust-version.workspace = true [dependencies] diff --git a/gprimitives/src/lib.rs b/gprimitives/src/lib.rs index 4088041a46a..61521e485dc 100644 --- a/gprimitives/src/lib.rs +++ b/gprimitives/src/lib.rs @@ -80,13 +80,15 @@ pub struct MessageHandle(u32); /// struct. The source `ActorId` for a message being processed can be obtained /// using `gstd::msg::source()` function. Also, each send function has a target /// `ActorId` as one of the arguments. +/// +/// NOTE: Implementation of `From` places bytes from idx=12 for Eth compatibility. #[derive(Clone, Copy, Default, Hash, Ord, PartialEq, PartialOrd, Eq, From, Into, AsRef, AsMut)] #[as_ref(forward)] #[as_mut(forward)] #[cfg_attr(feature = "codec", derive(TypeInfo, Encode, Decode, MaxEncodedLen), codec(crate = scale))] pub struct ActorId([u8; 32]); -macros::impl_primitive!(new zero into_bytes from_u64 from_h256 into_h256 try_from_slice debug, ActorId); +macros::impl_primitive!(new zero into_bytes from_h256 into_h256 try_from_slice debug, ActorId); impl ActorId { /// Returns the ss58-check address with default ss58 version. @@ -111,6 +113,14 @@ impl ActorId { } } +impl From for ActorId { + fn from(value: u64) -> Self { + let mut id = Self::zero(); + id.0[12..20].copy_from_slice(&value.to_le_bytes()[..]); + id + } +} + impl From for ActorId { fn from(h160: H160) -> Self { let mut actor_id = Self::zero(); diff --git a/gtest/src/lib.rs b/gtest/src/lib.rs index 46ebfaae02e..3743953fc96 100644 --- a/gtest/src/lib.rs +++ b/gtest/src/lib.rs @@ -531,10 +531,13 @@ pub mod constants { /// Gas allowance for executing user dispatch and set of generated /// by programs dispatches from execution of the user dispatch. - pub const GAS_ALLOWANCE: Gas = 750_000_000_000; + pub const GAS_ALLOWANCE: Gas = 1_000_000_000_000; + + /// Max allowed user gas to apply for external message. + pub const MAX_USER_GAS_LIMIT: Gas = 750_000_000_000; /// Gas multiplier used to calculate equivalence of gas in token value. - pub const GAS_MULTIPLIER: GasMultiplier = GasMultiplier::ValuePerGas(6); + pub const GAS_MULTIPLIER: GasMultiplier = GasMultiplier::ValuePerGas(VALUE_PER_GAS); /* Currency-related constants */ @@ -583,5 +586,5 @@ pub mod constants { } /// Default initial balance for users. - pub const DEFAULT_USERS_INITIAL_BALANCE: Value = EXISTENTIAL_DEPOSIT * 100_000; + pub const DEFAULT_USERS_INITIAL_BALANCE: Value = 100_000 * UNITS; } diff --git a/gtest/src/manager.rs b/gtest/src/manager.rs index 04bd511ae53..e636df9af71 100644 --- a/gtest/src/manager.rs +++ b/gtest/src/manager.rs @@ -16,16 +16,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -mod block_exec; -mod expend; -mod hold_bound; -mod journal; -mod memory; -mod reservations; -mod send_dispatch; -mod task; -mod wait_wake; - use crate::{ constants::Value, error::usage_panic, @@ -45,9 +35,8 @@ use crate::{ GAS_MULTIPLIER, INITIAL_RANDOM_SEED, MAX_RESERVATIONS, RESERVE_FOR, VALUE_PER_GAS, }; use core_processor::{ - common::*, - configs::{BlockConfig, TESTS_MAX_PAGES_NUMBER}, - ContextChargedForInstrumentation, ContextChargedForProgram, Ext, + common::*, configs::BlockConfig, ContextChargedForInstrumentation, ContextChargedForProgram, + Ext, }; use gear_common::{ auxiliary::{ @@ -81,6 +70,16 @@ use std::{ mem, }; +mod block_exec; +mod expend; +mod hold_bound; +mod journal; +mod memory; +mod reservations; +mod send_dispatch; +mod task; +mod wait_wake; + const OUTGOING_LIMIT: u32 = 1024; const OUTGOING_BYTES_LIMIT: u32 = 64 * 1024 * 1024; diff --git a/gtest/src/manager/block_exec.rs b/gtest/src/manager/block_exec.rs index 07361be7360..8f046dd3cfd 100644 --- a/gtest/src/manager/block_exec.rs +++ b/gtest/src/manager/block_exec.rs @@ -17,7 +17,7 @@ // along with this program. If not, see . use core_processor::SuccessfulDispatchResultKind; -use gear_core::{gas::GasCounter, str::LimitedStr}; +use gear_core::{code::MAX_WASM_PAGES_AMOUNT, gas::GasCounter, str::LimitedStr}; use task::get_maximum_task_gas; use super::*; @@ -540,7 +540,7 @@ impl ExtManager { existential_deposit: EXISTENTIAL_DEPOSIT, mailbox_threshold: schedule.rent_weights.mailbox_threshold.ref_time, max_reservations: MAX_RESERVATIONS, - max_pages: TESTS_MAX_PAGES_NUMBER.into(), + max_pages: MAX_WASM_PAGES_AMOUNT.into(), outgoing_limit: OUTGOING_LIMIT, outgoing_bytes_limit: OUTGOING_BYTES_LIMIT, } diff --git a/gtest/src/program.rs b/gtest/src/program.rs index c0478087f98..f9ea282fd41 100644 --- a/gtest/src/program.rs +++ b/gtest/src/program.rs @@ -22,7 +22,7 @@ use crate::{ manager::ExtManager, state::actors::{Actors, GenuineProgram, Program as InnerProgram, TestActor}, system::System, - Result, Value, GAS_ALLOWANCE, + Result, Value, MAX_USER_GAS_LIMIT, }; use codec::{Codec, Decode, Encode}; use gear_core::{ @@ -539,7 +539,7 @@ impl<'a> Program<'a> { ID: Into, T: Into>, { - self.send_bytes_with_gas_and_value(from, payload, GAS_ALLOWANCE, value) + self.send_bytes_with_gas_and_value(from, payload, MAX_USER_GAS_LIMIT, value) } /// Send the message to the program with bytes payload, gas limit and value. @@ -867,11 +867,8 @@ pub mod gbuild { #[cfg(test)] mod tests { use super::Program; - use crate::{Log, ProgramIdWrapper, System, Value, DEFAULT_USER_ALICE, EXISTENTIAL_DEPOSIT}; use demo_constructor::{Arg, Scheme}; - use gear_common::Origin; - use gear_core::ids::ActorId; use gear_core_errors::{ErrorReplyReason, ReplyCode, SimpleExecutionError}; @@ -1085,7 +1082,7 @@ mod tests { #[test] #[should_panic( - expected = "Insufficient balance: user (0x0500000000000000000000000000000000000000000000000000000000000000) \ + expected = "Insufficient balance: user (0x0000000000000000000000000500000000000000000000000000000000000000) \ tries to send (1000000000001) value, (4500000000000) gas and ED (1000000000000), while his balance (1000000000000)" )] fn fails_on_insufficient_balance() { @@ -1446,7 +1443,12 @@ mod tests { let handle = Calls::builder() .reserve_gas(10_000_000_000, 5) .store("reservation") - .reservation_send_value("reservation", user_id.into_origin().0, payload.clone(), 0); + .reservation_send_value( + "reservation", + ActorId::from(user_id).into_bytes(), + payload.clone(), + 0, + ); let msg_id = prog.send(user_id, handle); let res = sys.run_next_block(); assert!(res.succeed.contains(&msg_id)); @@ -1459,7 +1461,7 @@ mod tests { let new_prog_id = 4343; let new_program = Program::from_binary_with_id(&sys, new_prog_id, WASM_BINARY); let payload = b"sup!".to_vec(); - let handle = Calls::builder().send(user_id.into_origin().0, payload.clone()); + let handle = Calls::builder().send(ActorId::from(user_id).into_bytes(), payload.clone()); let scheme = Scheme::predefined( Calls::builder().noop(), handle, @@ -1474,7 +1476,12 @@ mod tests { let handle = Calls::builder() .reserve_gas(10_000_000_000, 5) .store("reservation") - .reservation_send_value("reservation", new_prog_id.into_origin().0, [], 0); + .reservation_send_value( + "reservation", + ActorId::from(new_prog_id).into_bytes(), + [], + 0, + ); let msg_id = prog.send(user_id, handle); let res = sys.run_next_block(); assert!(res.succeed.contains(&msg_id)); diff --git a/gtest/src/state/mailbox/actor.rs b/gtest/src/state/mailbox/actor.rs index 5e1f2d6632f..5744e096074 100644 --- a/gtest/src/state/mailbox/actor.rs +++ b/gtest/src/state/mailbox/actor.rs @@ -20,7 +20,7 @@ use crate::{ error::usage_panic, manager::ExtManager, state::{accounts::Accounts, actors::Actors}, - Log, Value, GAS_ALLOWANCE, + Log, Value, MAX_USER_GAS_LIMIT, }; use codec::Encode; use gear_common::{ @@ -96,7 +96,7 @@ impl<'a> ActorMailbox<'a> { { 0 } else { - GAS_ALLOWANCE + MAX_USER_GAS_LIMIT }; // Build a reply message diff --git a/node/cli/Cargo.toml b/node/cli/Cargo.toml index ff6548b230e..2d81b3cdc74 100644 --- a/node/cli/Cargo.toml +++ b/node/cli/Cargo.toml @@ -33,7 +33,7 @@ pallet-gear-payment = { workspace = true, features = ["std"] } pallet-gear-staking-rewards = { workspace = true, optional = true, features = ["std"] } # Gear Runtimes -vara-runtime = { workspace = true, optional = true, features = ["std", "dev", "metadata-hash"] } +vara-runtime = { workspace = true, optional = true, features = ["std", "dev"] } # Substrate client sc-cli.workspace = true @@ -51,7 +51,7 @@ sp-timestamp = { workspace = true, features = ["std"] } # Substrate other (benchmarking etc) frame-system = { workspace = true, features = ["std"] } -frame-metadata-hash-extension = { workspace = true, features = ["std"] } +frame-metadata-hash-extension = { workspace = true, optional = true, features = ["std"] } frame-benchmarking = { workspace = true, optional = true, features = ["std"] } frame-benchmarking-cli = { workspace = true, optional = true } @@ -73,9 +73,14 @@ runtime-benchmarks = [ "service/runtime-benchmarks", "frame-benchmarking", "frame-benchmarking-cli/runtime-benchmarks", + "frame-metadata-hash-extension", ] runtime-benchmarks-checkers = [ "vara-runtime?/runtime-benchmarks", "service/runtime-benchmarks-checkers", ] cli = [ "gcli" ] +metadata-hash = [ + "service/metadata-hash", + "vara-runtime?/metadata-hash", +] diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 2b5fd458cf4..4a6047770b7 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -120,3 +120,6 @@ runtime-benchmarks-checkers = [ try-runtime = [ "vara-runtime?/try-runtime", ] +metadata-hash = [ + "vara-runtime?/metadata-hash", +] diff --git a/node/service/src/chain_spec/vara.rs b/node/service/src/chain_spec/vara.rs index e5402cbfa2d..06075b54641 100644 --- a/node/service/src/chain_spec/vara.rs +++ b/node/service/src/chain_spec/vara.rs @@ -17,8 +17,10 @@ // along with this program. If not, see . use crate::chain_spec::{get_account_id_from_seed, get_from_seed, AccountId, Extensions}; -use gear_runtime_common::{self, constants::BANK_ADDRESS}; -use hex_literal::hex; +use gear_runtime_common::{ + self, + constants::{BANK_ADDRESS, VARA_DECIMAL, VARA_SS58PREFIX, VARA_TESTNET_TOKEN_SYMBOL}, +}; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_staking::Forcing; use sc_chain_spec::Properties; @@ -26,7 +28,7 @@ use sc_service::ChainType; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_consensus_babe::AuthorityId as BabeId; use sp_consensus_grandpa::AuthorityId as GrandpaId; -use sp_core::{crypto::UncheckedInto, sr25519}; +use sp_core::sr25519; use sp_runtime::{Perbill, Perquintill}; use vara_runtime::{ constants::currency::{ECONOMIC_UNITS, EXISTENTIAL_DEPOSIT, UNITS as TOKEN}, @@ -36,21 +38,14 @@ use vara_runtime::{ /// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. pub type ChainSpec = sc_service::GenericChainSpec; -/// Returns the [`Properties`] for the Vara network. -pub fn vara_properties() -> Properties { +/// Returns the [`Properties`] for the Vara Network Testnet (dev runtime). +pub fn vara_dev_properties() -> Properties { let mut p = Properties::new(); - p.insert( - "ss58format".into(), - gear_runtime_common::constants::VARA_SS58PREFIX.into(), - ); - p.insert( - "tokenDecimals".into(), - gear_runtime_common::constants::VARA_DECIMAL.into(), - ); - p.insert( - "tokenSymbol".into(), - gear_runtime_common::constants::VARA_TOKEN_SYMBOL.into(), - ); + + p.insert("ss58format".into(), VARA_SS58PREFIX.into()); + p.insert("tokenDecimals".into(), VARA_DECIMAL.into()); + p.insert("tokenSymbol".into(), VARA_TESTNET_TOKEN_SYMBOL.into()); + p } @@ -110,7 +105,7 @@ pub fn development_config() -> Result { BANK_ADDRESS.into(), true, )) - .with_properties(vara_properties()) + .with_properties(vara_dev_properties()) .build()) } @@ -141,433 +136,7 @@ pub fn local_testnet_config() -> Result { BANK_ADDRESS.into(), true, )) - .with_properties(vara_properties()) - .build()) -} - -/// Vara testnet config. -pub fn testnet() -> Result { - let wasm_binary = - WASM_BINARY.ok_or_else(|| "Staging testnet wasm not available".to_string())?; - - Ok(ChainSpec::builder(wasm_binary, Default::default()) - .with_name("Vara Network Testnet") - .with_id("vara_network_testnet") - .with_chain_type(ChainType::Live) - .with_genesis_config_patch(testnet_genesis( - // Initial PoA authorities - vec![ - ( - // Stash account - // kGk5PxzdHH3dqmr4sAhrj38WtZe7C6TLcWDK6j1VhMgxyE6Rv - hex!["c8e4df7eac6b52dc5281659f1f393903932ee4b1f69f311c3cb123bc40f9267a"].into(), - // Controller account - // kGk5PxzdHH3dqmr4sAhrj38WtZe7C6TLcWDK6j1VhMgxyE6Rv - hex!["c8e4df7eac6b52dc5281659f1f393903932ee4b1f69f311c3cb123bc40f9267a"].into(), - // BabeId: kGk5PxzdHH3dqmr4sAhrj38WtZe7C6TLcWDK6j1VhMgxyE6Rv - hex!["c8e4df7eac6b52dc5281659f1f393903932ee4b1f69f311c3cb123bc40f9267a"] - .unchecked_into(), - // GrandpaId: kGkmyeZMTU5LxL52va9WuEvQGzgGr25nAJWhnaZa3uTNogMdy - hex!["e7d812ca5322f9b735e6cef4953cb706ce349752d7c737ef7aac817ebb840de1"] - .unchecked_into(), - // ImOnlineId: kGk5PxzdHH3dqmr4sAhrj38WtZe7C6TLcWDK6j1VhMgxyE6Rv - hex!["c8e4df7eac6b52dc5281659f1f393903932ee4b1f69f311c3cb123bc40f9267a"] - .unchecked_into(), - // AuthorityDiscoveryId: kGk5PxzdHH3dqmr4sAhrj38WtZe7C6TLcWDK6j1VhMgxyE6Rv - hex!["c8e4df7eac6b52dc5281659f1f393903932ee4b1f69f311c3cb123bc40f9267a"] - .unchecked_into(), - ), - ( - // Stash account - // kGgu3wishk7ZwhQLdG6StPR8zNcE1roeeLbTLGxQXiUdrQ6vK - hex!["3c4c519e3d7149c93181e8e3762562db6f580c27502e9a6ab2f7464d6185241b"].into(), - // Controller account - // kGgu3wishk7ZwhQLdG6StPR8zNcE1roeeLbTLGxQXiUdrQ6vK - hex!["3c4c519e3d7149c93181e8e3762562db6f580c27502e9a6ab2f7464d6185241b"].into(), - // BabeId: kGgu3wishk7ZwhQLdG6StPR8zNcE1roeeLbTLGxQXiUdrQ6vK - hex!["3c4c519e3d7149c93181e8e3762562db6f580c27502e9a6ab2f7464d6185241b"] - .unchecked_into(), - // GrandpaId: kGhkmtR8b94qQhQLVukyTGyexoQyajydms3HFZeYLvxTwaEyt - hex!["6238894f19edef4a4a638b3fab9b42909336912bd6ccdf835e9ecc24a64a8713"] - .unchecked_into(), - // ImOnlineId: kGgu3wishk7ZwhQLdG6StPR8zNcE1roeeLbTLGxQXiUdrQ6vK - hex!["3c4c519e3d7149c93181e8e3762562db6f580c27502e9a6ab2f7464d6185241b"] - .unchecked_into(), - // AuthorityDiscoveryId: kGgu3wishk7ZwhQLdG6StPR8zNcE1roeeLbTLGxQXiUdrQ6vK - hex!["3c4c519e3d7149c93181e8e3762562db6f580c27502e9a6ab2f7464d6185241b"] - .unchecked_into(), - ), - ( - // Stash account - // kGhY2DGv6j9xzy3mJ84R19V9FVDRcxtbZ7QaBQw4tYiFBKzB7 - hex!["587e919f8149e31f7d4e99e8fbdf30ff119593376f066e20dacda9054892b478"].into(), - // Controller account - // kGhY2DGv6j9xzy3mJ84R19V9FVDRcxtbZ7QaBQw4tYiFBKzB7 - hex!["587e919f8149e31f7d4e99e8fbdf30ff119593376f066e20dacda9054892b478"].into(), - // BabeId: kGhY2DGv6j9xzy3mJ84R19V9FVDRcxtbZ7QaBQw4tYiFBKzB7 - hex!["587e919f8149e31f7d4e99e8fbdf30ff119593376f066e20dacda9054892b478"] - .unchecked_into(), - // GrandpaId: kGjxXy9tDgdthvcxjMacodRwDcF3EkLHw8YBnpKkcGdY8dm8c - hex!["c3a91848c88b9481405fb29d07cc221c400763ce3ed3c8735c64a86c026bb5ee"] - .unchecked_into(), - // ImOnlineId: kGhY2DGv6j9xzy3mJ84R19V9FVDRcxtbZ7QaBQw4tYiFBKzB7 - hex!["587e919f8149e31f7d4e99e8fbdf30ff119593376f066e20dacda9054892b478"] - .unchecked_into(), - // AuthorityDiscoveryId: kGhY2DGv6j9xzy3mJ84R19V9FVDRcxtbZ7QaBQw4tYiFBKzB7 - hex!["587e919f8149e31f7d4e99e8fbdf30ff119593376f066e20dacda9054892b478"] - .unchecked_into(), - ), - ( - // Stash account - // kGm2bGRMnUR4XBJBTZ46chAypEVSA8NGXwCMzjX5UHnbMwPui - hex!["f2fd6936b8ddad025d329ff2d6b5577e6381cb25333f6f17f592494b0b61ef55"].into(), - // Controller account - // kGm2bGRMnUR4XBJBTZ46chAypEVSA8NGXwCMzjX5UHnbMwPui - hex!["f2fd6936b8ddad025d329ff2d6b5577e6381cb25333f6f17f592494b0b61ef55"].into(), - // BabeId: kGm2bGRMnUR4XBJBTZ46chAypEVSA8NGXwCMzjX5UHnbMwPui - hex!["f2fd6936b8ddad025d329ff2d6b5577e6381cb25333f6f17f592494b0b61ef55"] - .unchecked_into(), - // GrandpaId: kGhUFt5bRR4D63XbEvGTN9nv8E6X5priTLr2BaxrPdHqN9BMD - hex!["559f99f172dcfef6c6894cfe53312b3f11d67c3ac0c29ead872d3ec37f7fcffa"] - .unchecked_into(), - // ImOnlineId: kGm2bGRMnUR4XBJBTZ46chAypEVSA8NGXwCMzjX5UHnbMwPui - hex!["f2fd6936b8ddad025d329ff2d6b5577e6381cb25333f6f17f592494b0b61ef55"] - .unchecked_into(), - // AuthorityDiscoveryId: kGm2bGRMnUR4XBJBTZ46chAypEVSA8NGXwCMzjX5UHnbMwPui - hex!["f2fd6936b8ddad025d329ff2d6b5577e6381cb25333f6f17f592494b0b61ef55"] - .unchecked_into(), - ), - ], - // Sudo account - // kGiV2zSRBY95vX3vsEa4YtvN2jo2pNsJKfUwye9t9w3fbDUnz - hex!["8273aff7a45330b7eff0807f3a888f442df36d8113e3a62fa99f9737520f1b04"].into(), - // Pre-funded accounts - vec![ - // root_key - hex!["8273aff7a45330b7eff0807f3a888f442df36d8113e3a62fa99f9737520f1b04"].into(), - ], - BANK_ADDRESS.into(), - true, - )) - .with_properties(vara_properties()) - .build()) -} - -/// Vara Network config. -pub fn main() -> Result { - let wasm_binary = - WASM_BINARY.ok_or_else(|| "Staging testnet wasm not available".to_string())?; - - Ok(ChainSpec::builder(wasm_binary, Default::default()) - .with_name("Vara Network") - .with_id("vara_network") - .with_chain_type(ChainType::Live) - .with_genesis_config_patch(testnet_genesis( - // Initial PoA authorities - vec![ - ( - // Stash account - // kGi3XM788mBXihSJc4zG2vtUEKYY674SVAYUfqozdS5ea8W6r - hex!["6efec345ff71786529e5e21ff50fb669a46cb052daa87fd2ce86d9ba4835a533"].into(), - // Controller account - // kGkhLheSUxk72NZdk4C9gTiSAvZQjtczMQiJVfiLe7yotnrUy - hex!["e44eb7c78c1a46e6d7a92fcc964f5362f0fe9514b58460513f8d051ff79fa95f"].into(), - // BabeId: kGi3XM788mBXihSJc4zG2vtUEKYY674SVAYUfqozdS5ea8W6r - hex!["6efec345ff71786529e5e21ff50fb669a46cb052daa87fd2ce86d9ba4835a533"] - .unchecked_into(), - // GrandpaId: kGi7rEfRsFBcYxWoE6w6DV6aQYfg6JTdsbykm29QRwYFAwEdW - hex!["724b54851966f862226e1892975858b59db7dc49f899adbeba305e5275b6c9e3"] - .unchecked_into(), - // ImOnlineId: kGi3XM788mBXihSJc4zG2vtUEKYY674SVAYUfqozdS5ea8W6r - hex!["6efec345ff71786529e5e21ff50fb669a46cb052daa87fd2ce86d9ba4835a533"] - .unchecked_into(), - // AuthorityDiscoveryId: kGi3XM788mBXihSJc4zG2vtUEKYY674SVAYUfqozdS5ea8W6r - hex!["6efec345ff71786529e5e21ff50fb669a46cb052daa87fd2ce86d9ba4835a533"] - .unchecked_into(), - ), - ( - // Stash account - // kGm764qkbhxXzYxTHjkTWqZrLQaQHt3HSqaSStvUbTXT6QSh7 - hex!["f66b57dee7e59d9288ae6ad9d70d06b7475d01d999a29c35676d7cca3b5fbd6b"].into(), - // Controller account - // kGgdLoe3ewEo5WK7RyASSzSBGAgcmJaAbhrvcjCsrdx6Grbur - hex!["3051267a473a914daab6519d363978f9102e56c0c3ef1be9bc3ae2ce37573630"].into(), - // BabeId: kGm764qkbhxXzYxTHjkTWqZrLQaQHt3HSqaSStvUbTXT6QSh7 - hex!["f66b57dee7e59d9288ae6ad9d70d06b7475d01d999a29c35676d7cca3b5fbd6b"] - .unchecked_into(), - // GrandpaId: kGjNmHk9hm2jErMsuJu9es7hz1iGwSby77bkxj3zQ7Za6Y4Zh - hex!["a9e7978e751ad81eda71e6216682674a3f6dbe0c0d0f8f12b83ebec4b7d963c5"] - .unchecked_into(), - // ImOnlineId: kGm764qkbhxXzYxTHjkTWqZrLQaQHt3HSqaSStvUbTXT6QSh7 - hex!["f66b57dee7e59d9288ae6ad9d70d06b7475d01d999a29c35676d7cca3b5fbd6b"] - .unchecked_into(), - // AuthorityDiscoveryId: kGm764qkbhxXzYxTHjkTWqZrLQaQHt3HSqaSStvUbTXT6QSh7 - hex!["f66b57dee7e59d9288ae6ad9d70d06b7475d01d999a29c35676d7cca3b5fbd6b"] - .unchecked_into(), - ), - ( - // Stash account - // kGig6t1HroDpAYwwvf3av53siUW7hKtyG4mbby1BTnCHiWwuZ - hex!["8ae47a881c08af1eef02292feb9cbdb9cda0e3ee127a07e1bd10f8794a45884c"].into(), - // Controller account - // kGggrp4DcKAhC9gzJMsXg4M1rVq7MoEfHsv9xSNym584wkHQ7 - hex!["32ffe6532fa969364f5b900ddbd5152869a512e1616b7dab8dbfb190e4a06140"].into(), - // BabeId: kGig6t1HroDpAYwwvf3av53siUW7hKtyG4mbby1BTnCHiWwuZ - hex!["8ae47a881c08af1eef02292feb9cbdb9cda0e3ee127a07e1bd10f8794a45884c"] - .unchecked_into(), - // GrandpaId: kGi5s2hDC67qYB6VeemUx5Wp9krs5XabKyMphcghJ5mYuMjC8 - hex!["70c782cde31d731ebf9417c80abab1c3945e12eecfdc71adc03e2686fb3a6c1b"] - .unchecked_into(), - // ImOnlineId: kGig6t1HroDpAYwwvf3av53siUW7hKtyG4mbby1BTnCHiWwuZ - hex!["8ae47a881c08af1eef02292feb9cbdb9cda0e3ee127a07e1bd10f8794a45884c"] - .unchecked_into(), - // AuthorityDiscoveryId: kGig6t1HroDpAYwwvf3av53siUW7hKtyG4mbby1BTnCHiWwuZ - hex!["8ae47a881c08af1eef02292feb9cbdb9cda0e3ee127a07e1bd10f8794a45884c"] - .unchecked_into(), - ), - ( - // Stash account - // kGiwtGLE3P774HYESzqTUj5XuJJsMKvcC5hT9GYwg4Phmt2m3 - hex!["96edf0641f4f4f387b15870d9610cdfc8db38c701e63b8e863e43e7ff366262b"].into(), - // Controller account - // kGkCTbKpa639cuW1GeAKERp64ZS86jKU2WA62HkvpYsCYXigT - hex!["ce47cc63787a62acdf9e1d22e295fd4fccd828578ca628c9f9a67f089bf0d07e"].into(), - // BabeId: kGiwtGLE3P774HYESzqTUj5XuJJsMKvcC5hT9GYwg4Phmt2m3 - hex!["96edf0641f4f4f387b15870d9610cdfc8db38c701e63b8e863e43e7ff366262b"] - .unchecked_into(), - // GrandpaId: kGgGuXDYWKvnZTvsGgUk1Csy673Jk3QfyH15PhBq5A8c5Ruoz - hex!["20bb21adf10a8909725498d447f4150a2aec5eca4adfda3321c4b9598298d8a0"] - .unchecked_into(), - // ImOnlineId: kGiwtGLE3P774HYESzqTUj5XuJJsMKvcC5hT9GYwg4Phmt2m3 - hex!["96edf0641f4f4f387b15870d9610cdfc8db38c701e63b8e863e43e7ff366262b"] - .unchecked_into(), - // AuthorityDiscoveryId: kGiwtGLE3P774HYESzqTUj5XuJJsMKvcC5hT9GYwg4Phmt2m3 - hex!["96edf0641f4f4f387b15870d9610cdfc8db38c701e63b8e863e43e7ff366262b"] - .unchecked_into(), - ), - ( - // Stash account - // kGkvWK1HaRRVcsf8dGvHL85mRLLPoBMJqz3k2WzxAzMqaZu2v - hex!["ee5941d0f4a1f50d70f27a90a655ede3f1dad5ba33a2f8fe9ea5bfe9f0d7c91e"].into(), - // Controller account - // kGiBGZWA1m55KgCFYh38pTkdJvgJ5ipauWzfpU11FVs3Ntqsw - hex!["74e6f377a9181e5d458871ef42d9cc70fccf71ae92be4c2773f0e6bfdf57303b"].into(), - // BabeId: kGkvWK1HaRRVcsf8dGvHL85mRLLPoBMJqz3k2WzxAzMqaZu2v - hex!["ee5941d0f4a1f50d70f27a90a655ede3f1dad5ba33a2f8fe9ea5bfe9f0d7c91e"] - .unchecked_into(), - // GrandpaId: kGhSUpp988X5ZtSmZVnrWnbS4QweifTp5e8R35Gorkc3PK8Un - hex!["5444aecf3e12dadd4e6f93ca04a7071cda2e7f90e8da7c98f55c27ab291a15f4"] - .unchecked_into(), - // ImOnlineId: kGkvWK1HaRRVcsf8dGvHL85mRLLPoBMJqz3k2WzxAzMqaZu2v - hex!["ee5941d0f4a1f50d70f27a90a655ede3f1dad5ba33a2f8fe9ea5bfe9f0d7c91e"] - .unchecked_into(), - // AuthorityDiscoveryId: kGkvWK1HaRRVcsf8dGvHL85mRLLPoBMJqz3k2WzxAzMqaZu2v - hex!["ee5941d0f4a1f50d70f27a90a655ede3f1dad5ba33a2f8fe9ea5bfe9f0d7c91e"] - .unchecked_into(), - ), - ( - // Stash account - // kGggVdmjUJL5oJhgmn4LA8KA4867EXuDt4cYmCSvysqRWyUwi - hex!["32b89c4a881f873f33bd18bbcc5b9e571c43e8caa9bd6169ded16e688f0c9d65"].into(), - // Controller account - // kGgujsZrbNWWWhe6HfYCpXaVWxZhCUXndNp6fupiGdZr1WBez - hex!["3cd2bac9ade1bc68c9e75d67c9aa9d021cb4c46ef16ba7a6ee8c1d351faa750f"].into(), - // BabeId: kGggVdmjUJL5oJhgmn4LA8KA4867EXuDt4cYmCSvysqRWyUwi - hex!["32b89c4a881f873f33bd18bbcc5b9e571c43e8caa9bd6169ded16e688f0c9d65"] - .unchecked_into(), - // GrandpaId: kGjMxCywE6yXcTqhtkbTuJxKCaZVKd3WJHGojEAVbh4XPCmGo - hex!["a94919797c3cd522ab4de174b9bbd830020372f4c6445ba7d90b491c3547eabf"] - .unchecked_into(), - // ImOnlineId: kGggVdmjUJL5oJhgmn4LA8KA4867EXuDt4cYmCSvysqRWyUwi - hex!["32b89c4a881f873f33bd18bbcc5b9e571c43e8caa9bd6169ded16e688f0c9d65"] - .unchecked_into(), - // AuthorityDiscoveryId: kGggVdmjUJL5oJhgmn4LA8KA4867EXuDt4cYmCSvysqRWyUwi - hex!["32b89c4a881f873f33bd18bbcc5b9e571c43e8caa9bd6169ded16e688f0c9d65"] - .unchecked_into(), - ), - ( - // Stash account - // kGhxBx6wT8TuTTp7Kq5Vo6YgG2GeWqqGMAvYQ1iezngp542F7 - hex!["6aed3db006563f67b75bd1c6cc2129eab6cdc0aac34281a50ea78c2b4d38fa5d"].into(), - // Controller account - // kGgpP8eJTF2pL81ifdRBJJDf32VTDR4drcmTFS34t3PppnRsW - hex!["38bcaf73c4c539cb055f81e0965379d189edf7687e5d7d4088b514acc0654a64"].into(), - // kGhxBx6wT8TuTTp7Kq5Vo6YgG2GeWqqGMAvYQ1iezngp542F7 - hex!["6aed3db006563f67b75bd1c6cc2129eab6cdc0aac34281a50ea78c2b4d38fa5d"] - .unchecked_into(), - // kGj1iR5fMqyBBZR7eKk92wU39upaPFgf8YzoWrrc2x9KpB1Wk - hex!["99d9c3f315705920228b49ad2b0d68ef2dc4cc1b6d9e395e93e9b56e224ec549"] - .unchecked_into(), - // kGhxBx6wT8TuTTp7Kq5Vo6YgG2GeWqqGMAvYQ1iezngp542F7 - hex!["6aed3db006563f67b75bd1c6cc2129eab6cdc0aac34281a50ea78c2b4d38fa5d"] - .unchecked_into(), - // kGhxBx6wT8TuTTp7Kq5Vo6YgG2GeWqqGMAvYQ1iezngp542F7 - hex!["6aed3db006563f67b75bd1c6cc2129eab6cdc0aac34281a50ea78c2b4d38fa5d"] - .unchecked_into(), - ), - ( - // Stash account - // kGgmgGKJHRMLkYRnjNSmu6ntrgNnhMdizphbpJSXAKv7sm5Yf - hex!["36ac9f1de2c59b1d175644c809765abaa9c18aa844d579c7a988a28be1d61336"].into(), - // Controller account - // kGjSj5gxudJBbwqQx7W8CcQ52QeBdKoTU9E7WyPBrcAUhFDEc - hex!["aced2430dcf00a89a4d9339ba01a6a1fad80f549768b05fdcb2b0a33fb6aec5b"].into(), - // kGgmgGKJHRMLkYRnjNSmu6ntrgNnhMdizphbpJSXAKv7sm5Yf - hex!["36ac9f1de2c59b1d175644c809765abaa9c18aa844d579c7a988a28be1d61336"] - .unchecked_into(), - // kGmAAhMP1Lyt8jhYugXccrjYMTCHeNGm4Fvx5nLcdE6VjnQTG - hex!["f8c4a9ea78f44b4e0ce7dcf37359f0a7e8a0ab5d956d9dbc177c3606bf874412"] - .unchecked_into(), - // kGgmgGKJHRMLkYRnjNSmu6ntrgNnhMdizphbpJSXAKv7sm5Yf - hex!["36ac9f1de2c59b1d175644c809765abaa9c18aa844d579c7a988a28be1d61336"] - .unchecked_into(), - // kGgmgGKJHRMLkYRnjNSmu6ntrgNnhMdizphbpJSXAKv7sm5Yf - hex!["36ac9f1de2c59b1d175644c809765abaa9c18aa844d579c7a988a28be1d61336"] - .unchecked_into(), - ), - ( - // Stash account - // kGkt6yGT1LmGWYnFoLJdtuuk8LbarJvwXCSGFiu9ivFG13mXx - hex!["ec84321d9751c066fb923035073a73d467d44642c457915e7496c52f45db1f65"].into(), - // Controller account - // kGg65JSrkz9R85RU8pudSRCJsQvrD3H3tJRqP87Dt2DWaRS73 - hex!["18785a9a9853652d403cfa7e89afb873c22c53e2f153c9fa5af856028de6a75f"].into(), - // BabeId: kGkt6yGT1LmGWYnFoLJdtuuk8LbarJvwXCSGFiu9ivFG13mXx - hex!["ec84321d9751c066fb923035073a73d467d44642c457915e7496c52f45db1f65"] - .unchecked_into(), - // GrandpaId: kGgrUdLxC4wsfJ8316uRprin3ouh73oMVRuTtnDemydVmFdwL - hex!["3a55ac67c147af497e9dc14debf7d5674969cc7cb2099fdf598ee6a7c36fe3b4"] - .unchecked_into(), - // ImOnlineId: kGkt6yGT1LmGWYnFoLJdtuuk8LbarJvwXCSGFiu9ivFG13mXx - hex!["ec84321d9751c066fb923035073a73d467d44642c457915e7496c52f45db1f65"] - .unchecked_into(), - // AuthorityDiscoveryId: kGkt6yGT1LmGWYnFoLJdtuuk8LbarJvwXCSGFiu9ivFG13mXx - hex!["ec84321d9751c066fb923035073a73d467d44642c457915e7496c52f45db1f65"] - .unchecked_into(), - ), - ( - // Stash account - // kGm9advPW8FVJQVnvTwB7ijbd37Es1CReCcdJy5EAJFLF5mPu - hex!["f85202a9d5727171623a417147625dcd317c7ecb7ce79f8b664dfac093efda19"].into(), - // Controller account - // kGfgmBYai833QG8pdFeCAho73nut7a4Zrx8YYsm1dL7xQrEhc - hex!["06b0b7361b821f19c84c05a558d60a44a52d7ae350c3637b65df40baf66f4a64"].into(), - // BabeId: kGm9advPW8FVJQVnvTwB7ijbd37Es1CReCcdJy5EAJFLF5mPu - hex!["f85202a9d5727171623a417147625dcd317c7ecb7ce79f8b664dfac093efda19"] - .unchecked_into(), - // GrandpaId: kGkiiv3nDz2dmZZbkqPZGH73Mb4vWUpx451CoweFq4qpbo9QG - hex!["e55cbde1cf31fe6b891ac4cffcce790015e77ddd0f6943653e9b4d722f72baa4"] - .unchecked_into(), - // ImOnlineId: kGm9advPW8FVJQVnvTwB7ijbd37Es1CReCcdJy5EAJFLF5mPu - hex!["f85202a9d5727171623a417147625dcd317c7ecb7ce79f8b664dfac093efda19"] - .unchecked_into(), - // AuthorityDiscoveryId: kGm9advPW8FVJQVnvTwB7ijbd37Es1CReCcdJy5EAJFLF5mPu - hex!["f85202a9d5727171623a417147625dcd317c7ecb7ce79f8b664dfac093efda19"] - .unchecked_into(), - ), - ( - // Stash account: kGhxAkgEraid83wXjfRL2gQEahxYY2VcUVP1Us9UzkUEVwuHU - hex!["6ae93625c928a59f1bf9f1c01548bbd72d9bb356c56c2bb070dda79590fd4a7f"].into(), - // Controller account: kGjSTB11PhY9TjzrZvsgCmYeKkCEJabmDPXam1xBkctXFUvgX - hex!["acb796bd17e05ea7c1764355d3c524d8379dc88b910467379afab52776d8616a"].into(), - // Babe key: kGhxAkgEraid83wXjfRL2gQEahxYY2VcUVP1Us9UzkUEVwuHU - hex!["6ae93625c928a59f1bf9f1c01548bbd72d9bb356c56c2bb070dda79590fd4a7f"] - .unchecked_into(), - // Grandpa key: kGgZopsg1gEytoxPRQKkynJxphe9WpjTCRHD9obzPRqKRrDrE - hex!["2d9f2166122f449c2dcb92d4de97cca7043158968d82e27bacade4015ec55b00"] - .unchecked_into(), - // ImOnline key: kGhxAkgEraid83wXjfRL2gQEahxYY2VcUVP1Us9UzkUEVwuHU - hex!["6ae93625c928a59f1bf9f1c01548bbd72d9bb356c56c2bb070dda79590fd4a7f"] - .unchecked_into(), - // AuthorityDiscovery key: kGhxAkgEraid83wXjfRL2gQEahxYY2VcUVP1Us9UzkUEVwuHU - hex!["6ae93625c928a59f1bf9f1c01548bbd72d9bb356c56c2bb070dda79590fd4a7f"] - .unchecked_into(), - ), - ( - // Stash account: kGkw44EiDvjPHz5A7QYVdHxHfD8xQr4ygVtXET5TTrGXXLRz9 - hex!["eec41f1d016d876f654f247b21813f966a72dd2a60011abed5758a6e26ae7d38"].into(), - // Controller account: kGgMr7E54kNMtnB2RMaQ3zX9iGUxxRWsaQFnjT4cTa2AWcFx6 - hex!["247fde0495a574246a1f69bc7a49c752c07a3a82fb2054e40f6d3c9d04e00223"].into(), - // Babe key: kGkw44EiDvjPHz5A7QYVdHxHfD8xQr4ygVtXET5TTrGXXLRz9 - hex!["eec41f1d016d876f654f247b21813f966a72dd2a60011abed5758a6e26ae7d38"] - .unchecked_into(), - // Grandpa key: kGhjBBL9XfWkq8yG5RE7JAsCEQ28j1yPf9DSb6ndc4Lq1iKTU - hex!["610073bfa83e6d7dc7f4ff4fa28c76141a7f8f4da2f7d227edd6432cbe49db62"] - .unchecked_into(), - // ImOnline key: kGkw44EiDvjPHz5A7QYVdHxHfD8xQr4ygVtXET5TTrGXXLRz9 - hex!["eec41f1d016d876f654f247b21813f966a72dd2a60011abed5758a6e26ae7d38"] - .unchecked_into(), - // AuthorityDiscovery key: kGkw44EiDvjPHz5A7QYVdHxHfD8xQr4ygVtXET5TTrGXXLRz9 - hex!["eec41f1d016d876f654f247b21813f966a72dd2a60011abed5758a6e26ae7d38"] - .unchecked_into(), - ), - ( - // Stash account: kGkRf6uswrEEnfzAXY8UbiKhqbW6uwG2ZhXRs28hJgzJdh4A9 - hex!["d858bc34e0aa888b6b5f8ce10b6db1112526049cb4c52ef95dfb1c9b10494818"].into(), - // Controller account: kGkyLUqpzswKFAE3JE2FGwuRX9537wi2gbw7MiwoUBnA6y2rx - hex!["f081e6b796bdd0b7f6217d67f75cd545d7c6224cde534f1edc442ce596bf6c77"].into(), - // Babe key: kGkRf6uswrEEnfzAXY8UbiKhqbW6uwG2ZhXRs28hJgzJdh4A9 - hex!["d858bc34e0aa888b6b5f8ce10b6db1112526049cb4c52ef95dfb1c9b10494818"] - .unchecked_into(), - // Grandpa key: kGmJYPMMbn6aAUzf7xg7C2AKWdKxvjwjTEMcHqGumFDA7myvK - hex!["ff27a40d9901dfbec094c38c0f884efa96168445b206a8b7a1fb8c80301996a5"] - .unchecked_into(), - // ImOnline key: kGkRf6uswrEEnfzAXY8UbiKhqbW6uwG2ZhXRs28hJgzJdh4A9 - hex!["d858bc34e0aa888b6b5f8ce10b6db1112526049cb4c52ef95dfb1c9b10494818"] - .unchecked_into(), - // AuthorityDiscovery key: kGkRf6uswrEEnfzAXY8UbiKhqbW6uwG2ZhXRs28hJgzJdh4A9 - hex!["d858bc34e0aa888b6b5f8ce10b6db1112526049cb4c52ef95dfb1c9b10494818"] - .unchecked_into(), - ), - ( - // Stash account: kGk2TDx8rZrxcwr2aoDxLkaF5d3vkqMTxGUu4LibPq9VKJUG1 - hex!["c6a61a93bd2261b7667ec4ab812c71bba4cfae3e1d376b9dd52ade4652dcc151"].into(), - // Controller account: kGiBPzdDoqQbC11r24arKiAPCSLfjdGAWTtuy5ACJ1eM9dHkj - hex!["74fff92414ef779a9c39a32cc740da6f89e8e0c37ef8935ae96cc90845f1830f"].into(), - // Babe key: kGk2TDx8rZrxcwr2aoDxLkaF5d3vkqMTxGUu4LibPq9VKJUG1 - hex!["c6a61a93bd2261b7667ec4ab812c71bba4cfae3e1d376b9dd52ade4652dcc151"] - .unchecked_into(), - // Grandpa key: kGhtqJgG4qabpb7V78uirv7W9iPBARy36znYwahbbMsQaNTLh - hex!["685e01afd77c4c4c577d2380767ec1549114e86513f0b6ce31be96b5b45ad99c"] - .unchecked_into(), - // ImOnline key: kGk2TDx8rZrxcwr2aoDxLkaF5d3vkqMTxGUu4LibPq9VKJUG1 - hex!["c6a61a93bd2261b7667ec4ab812c71bba4cfae3e1d376b9dd52ade4652dcc151"] - .unchecked_into(), - // AuthorityDiscovery key: kGk2TDx8rZrxcwr2aoDxLkaF5d3vkqMTxGUu4LibPq9VKJUG1 - hex!["c6a61a93bd2261b7667ec4ab812c71bba4cfae3e1d376b9dd52ade4652dcc151"] - .unchecked_into(), - ), - ( - // Stash account: kGkRHtZZWpwXpCHLGMXMKyTe8mL6gseT2eBBX3Da5XXVfX6ky - hex!["d81153798064bd066022258057680b0cfe2db6e8b9c96995d6216a39b687881d"].into(), - // Controller account: kGjV2YVGzTWQBfbHLsJRZbyXGp6VHP8hK9wNbLwnUAjGmz7aV - hex!["aeae6a26d64a51c4afcb2bcd2546f63162f1130d1670a366ef6a643b8443a546"].into(), - // Babe key: kGkRHtZZWpwXpCHLGMXMKyTe8mL6gseT2eBBX3Da5XXVfX6ky - hex!["d81153798064bd066022258057680b0cfe2db6e8b9c96995d6216a39b687881d"] - .unchecked_into(), - // Grandpa key: kGj26nHC5VGor2QyX8AGfaXbyKcfETUzQRCgC9ZE7JKA7awb7 - hex!["9a250ded2628e6ae38ee0ddf9d0b081801f6c50333418214f0671f5cf8b8149e"] - .unchecked_into(), - // ImOnline account: kGkRHtZZWpwXpCHLGMXMKyTe8mL6gseT2eBBX3Da5XXVfX6ky - hex!["d81153798064bd066022258057680b0cfe2db6e8b9c96995d6216a39b687881d"] - .unchecked_into(), - // AuthorityDiscovery account: kGkRHtZZWpwXpCHLGMXMKyTe8mL6gseT2eBBX3Da5XXVfX6ky - hex!["d81153798064bd066022258057680b0cfe2db6e8b9c96995d6216a39b687881d"] - .unchecked_into(), - ), - ], - // Sudo account - // 5CtLwzLdsTZnyA3TN7FUV58FV4NZ1tUuTDM9yjwRuvt6ac1i - hex!["2455655ad2a1f9fbe510699026fc810a2b3cb91d432c141db54a9968da944955"].into(), - // Pre-funded accounts - vec![ - // root_key - hex!["2455655ad2a1f9fbe510699026fc810a2b3cb91d432c141db54a9968da944955"].into(), - ], - BANK_ADDRESS.into(), - true, - )) - .with_properties(vara_properties()) + .with_properties(vara_dev_properties()) .build()) } diff --git a/pallets/gas/Cargo.toml b/pallets/gas/Cargo.toml index e9f5f6c0076..251cfaaff1f 100644 --- a/pallets/gas/Cargo.toml +++ b/pallets/gas/Cargo.toml @@ -66,4 +66,3 @@ runtime-benchmarks = [ "parity-wasm", ] try-runtime = ["frame-support/try-runtime"] -fuzz = ["common/fuzz"] diff --git a/pallets/gear-builtin/src/tests/basic.rs b/pallets/gear-builtin/src/tests/basic.rs index ecc5b696a31..e056d05a3af 100644 --- a/pallets/gear-builtin/src/tests/basic.rs +++ b/pallets/gear-builtin/src/tests/basic.rs @@ -237,7 +237,7 @@ fn calculate_gas_info_works() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) && message.details().is_some() && { + message.destination() == SIGNER.cast() && message.details().is_some() && { let details = message.details().expect("Value checked above"); details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( diff --git a/pallets/gear-builtin/src/tests/bls381.rs b/pallets/gear-builtin/src/tests/bls381.rs index d2179bacb71..5c11ec11de1 100644 --- a/pallets/gear-builtin/src/tests/bls381.rs +++ b/pallets/gear-builtin/src/tests/bls381.rs @@ -95,7 +95,7 @@ fn decoding_error() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::UserspacePanic, @@ -137,7 +137,7 @@ fn multi_miller_loop() { assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::UserspacePanic, @@ -172,7 +172,7 @@ fn multi_miller_loop() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -197,7 +197,7 @@ fn multi_miller_loop() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) @@ -256,7 +256,7 @@ fn final_exponentiation() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -281,7 +281,7 @@ fn final_exponentiation() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) @@ -339,7 +339,7 @@ fn msm_g1() { assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::UserspacePanic, @@ -374,7 +374,7 @@ fn msm_g1() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -399,7 +399,7 @@ fn msm_g1() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) @@ -457,7 +457,7 @@ fn msm_g2() { assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::UserspacePanic, @@ -492,7 +492,7 @@ fn msm_g2() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -517,7 +517,7 @@ fn msm_g2() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) @@ -574,7 +574,7 @@ fn mul_projective_g1() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -599,7 +599,7 @@ fn mul_projective_g1() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) @@ -656,7 +656,7 @@ fn mul_projective_g2() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -681,7 +681,7 @@ fn mul_projective_g2() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) @@ -717,7 +717,7 @@ fn aggregate_g1() { let encoded_points = ark_points.encode(); let payload = Request::AggregateG1 { points: encoded_points }.encode(); - let builtin_actor_id: ProgramId = H256::from(ACTOR_ID).cast(); + let builtin_actor_id = ACTOR_ID.into(); let gas_info = get_gas_info(builtin_actor_id, payload.clone()); // Check the case of insufficient gas @@ -736,7 +736,7 @@ fn aggregate_g1() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -761,7 +761,7 @@ fn aggregate_g1() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) @@ -816,7 +816,7 @@ fn map_to_g2affine() { // An error reply should have been sent. assert!(System::events().into_iter().any(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - message.destination() == ProgramId::from(SIGNER) + message.destination() == SIGNER.cast() && matches!(message.details(), Some(details) if details.to_reply_code() == ReplyCode::Error(ErrorReplyReason::Execution( SimpleExecutionError::RanOutOfGas, @@ -841,7 +841,7 @@ fn map_to_g2affine() { let response = match System::events().into_iter().find_map(|e| match e.event { RuntimeEvent::Gear(pallet_gear::Event::::UserMessageSent { message, .. }) => { - assert_eq!(message.destination(), ProgramId::from(SIGNER)); + assert_eq!(message.destination(), SIGNER.cast()); assert!(matches!(message.details(), Some(details) if matches!(details.to_reply_code(), ReplyCode::Success(..)))); Some(message.payload_bytes().to_vec()) diff --git a/pallets/gear-debug/src/tests/mod.rs b/pallets/gear-debug/src/tests/mod.rs index d30de8332bf..4b1827524cc 100644 --- a/pallets/gear-debug/src/tests/mod.rs +++ b/pallets/gear-debug/src/tests/mod.rs @@ -18,7 +18,7 @@ use super::*; use crate::mock::*; -use common::{self, event::MessageEntry, CodeStorage, Origin as _}; +use common::{self, event::MessageEntry, CodeStorage, Origin}; use frame_support::assert_ok; use gear_core::{ ids::{prelude::*, CodeId, MessageId, ProgramId}, @@ -251,7 +251,7 @@ fn debug_mode_works() { DispatchKind::Handle, StoredMessage::new( message_id_1, - 1.into(), + 1.cast(), program_id_1, Default::default(), 0, @@ -263,7 +263,7 @@ fn debug_mode_works() { DispatchKind::Handle, StoredMessage::new( message_id_2, - 1.into(), + 1.cast(), program_id_2, Default::default(), 0, @@ -356,10 +356,12 @@ fn get_last_program_id() -> ProgramId { } #[track_caller] -fn maybe_last_message(account: u64) -> Option { +fn maybe_last_message(account: impl Origin) -> Option { + let account = account.cast(); + System::events().into_iter().rev().find_map(|e| { if let super::mock::RuntimeEvent::Gear(Event::UserMessageSent { message, .. }) = e.event { - if message.destination() == account.into() { + if message.destination() == account { Some(message) } else { None diff --git a/pallets/gear-scheduler/src/tests.rs b/pallets/gear-scheduler/src/tests.rs index 274f63b6133..18f094ee76b 100644 --- a/pallets/gear-scheduler/src/tests.rs +++ b/pallets/gear-scheduler/src/tests.rs @@ -48,12 +48,12 @@ fn wl_cost_for(amount_of_blocks: u64) -> u128 { gas_price( as Scheduler>::CostsPerBlock::waitlist() * amount_of_blocks) } -fn dispatch_from(src: impl Into) -> StoredDispatch { +fn dispatch_from(src: impl Origin) -> StoredDispatch { StoredDispatch::new( DispatchKind::Handle, StoredMessage::new( H256::random().cast(), - src.into(), + src.cast(), H256::random().cast(), Default::default(), 0, diff --git a/pallets/gear/Cargo.toml b/pallets/gear/Cargo.toml index af9fb543119..f7a15effebf 100644 --- a/pallets/gear/Cargo.toml +++ b/pallets/gear/Cargo.toml @@ -9,6 +9,9 @@ homepage.workspace = true repository.workspace = true readme = "README.md" +[lints] +workspace = true + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -204,4 +207,3 @@ runtime-benchmarks = [ ] runtime-benchmarks-checkers = [] try-runtime = ["frame-support/try-runtime"] -fuzz = ["pallet-gear-gas/fuzz", "common/fuzz"] diff --git a/pallets/gear/src/schedule.rs b/pallets/gear/src/schedule.rs index 33f1672ef6a..5c9fbf0bfc0 100644 --- a/pallets/gear/src/schedule.rs +++ b/pallets/gear/src/schedule.rs @@ -24,7 +24,10 @@ use common::scheduler::SchedulingCostsPerBlock; use frame_support::{traits::Get, weights::Weight}; use gear_core::{ code::MAX_WASM_PAGES_AMOUNT, - costs::{ExtCosts, InstantiationCosts, LazyPagesCosts, ProcessCosts, RentCosts, SyscallCosts}, + costs::{ + ExtCosts, InstantiationCosts, IoCosts, LazyPagesCosts, PagesCosts, ProcessCosts, RentCosts, + SyscallCosts, + }, message, pages::{GearPage, WasmPage}, }; @@ -56,12 +59,12 @@ pub const INSTR_BENCHMARK_BATCH_SIZE: u32 = 500; /// To avoid potential stack overflow problems we have a panic in sandbox in case, /// execution is ended with stack overflow error. So, process queue execution will be /// stopped and we will be able to investigate the problem and decrease this constant if needed. -#[cfg(not(feature = "fuzz"))] +#[cfg(not(fuzz))] pub const STACK_HEIGHT_LIMIT: u32 = 36_743; /// For the fuzzer, we take the maximum possible stack limit calculated by the `calc-stack-height` /// utility, which would be suitable for Linux machines. This has a positive effect on code coverage. -#[cfg(feature = "fuzz")] +#[cfg(fuzz)] pub const FUZZER_STACK_HEIGHT_LIMIT: u32 = 65_000; /// Maximum number of data segments in a wasm module. @@ -823,9 +826,9 @@ impl Default for Schedule { impl Default for Limits { fn default() -> Self { Self { - #[cfg(not(feature = "fuzz"))] + #[cfg(not(fuzz))] stack_height: Some(STACK_HEIGHT_LIMIT), - #[cfg(feature = "fuzz")] + #[cfg(fuzz)] stack_height: Some(FUZZER_STACK_HEIGHT_LIMIT), data_segments_amount: DATA_SEGMENTS_AMOUNT_LIMIT, globals: 256, @@ -1301,6 +1304,27 @@ impl Default for MemoryWeights { } } +impl From> for IoCosts { + fn from(val: MemoryWeights) -> Self { + Self { + common: PagesCosts::from(val.clone()), + lazy_pages: LazyPagesCosts::from(val), + } + } +} + +impl From> for PagesCosts { + fn from(val: MemoryWeights) -> Self { + Self { + load_page_data: val.load_page_data.ref_time().into(), + upload_page_data: val.upload_page_data.ref_time().into(), + mem_grow: val.mem_grow.ref_time().into(), + mem_grow_per_page: val.mem_grow_per_page.ref_time().into(), + parachain_read_heuristic: val.parachain_read_heuristic.ref_time().into(), + } + } +} + impl From> for LazyPagesCosts { fn from(val: MemoryWeights) -> Self { Self { diff --git a/pallets/gear/src/tests.rs b/pallets/gear/src/tests.rs index 8feccac9a9d..40303b83f85 100644 --- a/pallets/gear/src/tests.rs +++ b/pallets/gear/src/tests.rs @@ -374,7 +374,7 @@ fn test_failing_delayed_reservation_send() { let message = maybe_any_last_message().expect("Should be"); assert_eq!(message.id(), err_reply); - assert_eq!(message.destination(), USER_1.into()); + assert_eq!(message.destination(), USER_1.cast()); }); } @@ -2137,7 +2137,7 @@ fn delayed_send_user_message_with_reservation() { PROXY_WGAS_WASM_BINARY.to_vec(), DEFAULT_SALT.to_vec(), InputArgs { - destination: USER_2.into(), + destination: USER_2.cast(), delay: delay.saturated_into(), reservation_amount, } @@ -3220,7 +3220,7 @@ fn send_message_works() { assert_ok!(Gear::send_message( RuntimeOrigin::signed(USER_1), - USER_2.into(), + USER_2.cast(), EMPTY_PAYLOAD.to_vec(), DEFAULT_GAS_LIMIT, mail_value, @@ -3417,7 +3417,7 @@ fn send_message_expected_failure() { MailboxOf::::clear(); assert_ok!(Gear::send_message( RuntimeOrigin::signed(LOW_BALANCE_USER), - USER_1.into(), + USER_1.cast(), EMPTY_PAYLOAD.to_vec(), 10, value, @@ -3465,7 +3465,7 @@ fn messages_processing_works() { assert_last_dequeued(2); - assert_ok!(send_default_message(USER_1, USER_2.into())); + assert_ok!(send_default_message(USER_1, USER_2.cast())); assert_ok!(send_default_message(USER_1, program_id)); run_to_block(3, None); @@ -6010,7 +6010,7 @@ fn test_wait_timeout() { // // Emits error when locks are timeout let duration = 10u64; - let payload = Command::SendTimeout(USER_1.into(), duration.saturated_into()).encode(); + let payload = Command::SendTimeout(USER_1.cast(), duration.saturated_into()).encode(); assert_ok!(Gear::send_message( RuntimeOrigin::signed(USER_1), program_id, @@ -6070,7 +6070,7 @@ fn test_join_wait_timeout() { let duration_a: BlockNumber = 5; let duration_b: BlockNumber = 10; let payload = Command::JoinTimeout( - USER_1.into(), + USER_1.cast(), duration_a.saturated_into(), duration_b.saturated_into(), ) @@ -6135,7 +6135,7 @@ fn test_select_wait_timeout() { let duration_a: BlockNumber = 5; let duration_b: BlockNumber = 10; let payload = Command::SelectTimeout( - USER_1.into(), + USER_1.cast(), duration_a.saturated_into(), duration_b.saturated_into(), ) @@ -6186,7 +6186,7 @@ fn test_wait_lost() { let duration_a: BlockNumber = 5; let duration_b: BlockNumber = 10; - let payload = Command::WaitLost(USER_1.into()).encode(); + let payload = Command::WaitLost(USER_1.cast()).encode(); assert_ok!(Gear::send_message( RuntimeOrigin::signed(USER_1), program_id, @@ -6819,7 +6819,7 @@ fn test_sequence_inheritor_of() { // serial inheritance let mut programs = vec![]; for i in 1000..1100 { - let program_id = ProgramId::from(i); + let program_id = i.cast(); manager.set_program( program_id, &code_info, @@ -6828,7 +6828,7 @@ fn test_sequence_inheritor_of() { ); ProgramStorageOf::::update_program_if_active(program_id, |program, _bn| { - let inheritor = programs.last().copied().unwrap_or_else(|| USER_1.into()); + let inheritor = programs.last().copied().unwrap_or_else(|| USER_1.cast()); if i % 2 == 0 { *program = Program::Exited(inheritor); } else { @@ -6856,23 +6856,23 @@ fn test_sequence_inheritor_of() { (inheritor, holders) }; - let res = Gear::inheritor_for(USER_1.into(), NonZero::::MAX); + let res = Gear::inheritor_for(USER_1.cast(), NonZero::::MAX); assert_eq!(res, Err(InheritorForError::NotFound)); let (inheritor, holders) = inheritor_for(programs[99], usize::MAX); - assert_eq!(inheritor, USER_1.into()); + assert_eq!(inheritor, USER_1.cast()); assert_eq!(holders, indexed_programs); let (inheritor, holders) = inheritor_for(programs[49], usize::MAX); - assert_eq!(inheritor, USER_1.into()); + assert_eq!(inheritor, USER_1.cast()); assert_eq!(holders, indexed_programs[..=49]); let (inheritor, holders) = inheritor_for(programs[0], usize::MAX); - assert_eq!(inheritor, USER_1.into()); + assert_eq!(inheritor, USER_1.cast()); assert_eq!(holders, indexed_programs[..=0]); let (inheritor, holders) = inheritor_for(programs[0], 1); - assert_eq!(inheritor, USER_1.into()); + assert_eq!(inheritor, USER_1.cast()); assert_eq!(holders, indexed_programs[..=0]); let (inheritor, holders) = inheritor_for(programs[99], 10); @@ -6884,7 +6884,7 @@ fn test_sequence_inheritor_of() { assert_eq!(holders, indexed_programs[50..]); let (inheritor, holders) = inheritor_for(programs[99], 100); - assert_eq!(inheritor, USER_1.into()); + assert_eq!(inheritor, USER_1.cast()); assert_eq!(holders, indexed_programs); let (inheritor, holders) = inheritor_for(programs[99], 99); @@ -13417,7 +13417,7 @@ fn relay_messages() { RelayCall::ResendPush(vec![ // "Hi, USER_2!" ResendPushData { - destination: USER_2.into(), + destination: USER_2.cast(), start: None, end: Some((10, true)), }, @@ -13431,7 +13431,7 @@ fn relay_messages() { RelayCall::ResendPush(vec![ // the same but end index specified in another way ResendPushData { - destination: USER_2.into(), + destination: USER_2.cast(), start: None, end: Some((11, false)), }, @@ -13445,7 +13445,7 @@ fn relay_messages() { RelayCall::ResendPush(vec![ // "Ping USER_3." ResendPushData { - destination: USER_3.into(), + destination: USER_3.cast(), start: Some(12), end: None, }, @@ -13459,7 +13459,7 @@ fn relay_messages() { RelayCall::ResendPush(vec![ // invalid range ResendPushData { - destination: USER_3.into(), + destination: USER_3.cast(), start: Some(2), end: Some((0, true)), }, @@ -13476,7 +13476,7 @@ fn relay_messages() { } test( - RelayCall::Resend(USER_3.into()), + RelayCall::Resend(USER_3.cast()), payload, vec![Expected { user: USER_3, @@ -13484,7 +13484,7 @@ fn relay_messages() { }], ); test( - RelayCall::ResendWithGas(USER_3.into(), 50_000), + RelayCall::ResendWithGas(USER_3.cast(), 50_000), payload, vec![Expected { user: USER_3, @@ -16520,10 +16520,12 @@ pub(crate) mod utils { } #[track_caller] - pub(super) fn maybe_last_message(account: AccountId) -> Option { + pub(super) fn maybe_last_message(account: impl Origin) -> Option { + let account = account.cast(); + System::events().into_iter().rev().find_map(|e| { if let MockRuntimeEvent::Gear(Event::UserMessageSent { message, .. }) = e.event { - if message.destination() == account.into() { + if message.destination() == account { Some(message) } else { None @@ -16560,8 +16562,8 @@ pub(crate) mod utils { } #[track_caller] - pub(super) fn get_last_mail(account: AccountId) -> UserStoredMessage { - MailboxOf::::iter_key(account) + pub(super) fn get_last_mail(account: impl Origin) -> UserStoredMessage { + MailboxOf::::iter_key(account.cast()) .last() .map(|(msg, _bn)| msg) .expect("Element should be") @@ -16727,7 +16729,9 @@ pub(crate) mod utils { } #[track_caller] - pub(crate) fn assert_responses_to_user(user_id: AccountId, assertions: Vec) { + pub(crate) fn assert_responses_to_user(user_id: impl Origin, assertions: Vec) { + let user_id = user_id.cast(); + let messages: Vec = System::events() .into_iter() .filter_map(|e| { @@ -16737,7 +16741,7 @@ pub(crate) mod utils { None } }) - .filter(|message| message.destination() == user_id.into()) + .filter(|message| message.destination() == user_id) .collect(); if messages.len() != assertions.len() { @@ -16838,12 +16842,14 @@ pub(crate) mod utils { // Collect all messages by account in chronological order (oldest first) #[track_caller] - pub(super) fn all_user_messages(user_id: AccountId) -> Vec { + pub(super) fn all_user_messages(user_id: impl Origin) -> Vec { + let user_id = user_id.cast(); + System::events() .into_iter() .filter_map(|e| { if let MockRuntimeEvent::Gear(Event::UserMessageSent { message, .. }) = e.event { - if message.destination() == user_id.into() { + if message.destination() == user_id { Some(message) } else { None diff --git a/runtime-interface/sandbox/Cargo.toml b/runtime-interface/sandbox/Cargo.toml index 9299d1dbea6..bf3a73307b3 100644 --- a/runtime-interface/sandbox/Cargo.toml +++ b/runtime-interface/sandbox/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "gear-sandbox-interface" description = "Gear Sandbox Interface" +documentation = "https://docs.rs/gear-sandbox-interface" version.workspace = true authors.workspace = true edition.workspace = true diff --git a/runtime/common/src/constants.rs b/runtime/common/src/constants.rs index 9ba5b9ae6ac..b0df1d314b3 100644 --- a/runtime/common/src/constants.rs +++ b/runtime/common/src/constants.rs @@ -27,6 +27,9 @@ pub const VARA_DECIMAL: u8 = 12; /// Vara Token Symbol pub const VARA_TOKEN_SYMBOL: &str = "VARA"; +/// Vara Testnet Token Symbol +pub const VARA_TESTNET_TOKEN_SYMBOL: &str = "TVARA"; + /// The minimal amount of blocks to resume represented as a factor of weeks. pub const RENT_RESUME_WEEK_FACTOR: BlockNumber = 4; diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index e2af6d0630d..01e9e8d0d6a 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -20,7 +20,6 @@ mod apis; pub mod constants; -pub mod weights; use sp_runtime::traits::Get; diff --git a/runtime/common/src/weights.rs b/runtime/common/src/weights.rs deleted file mode 100644 index 74e167b6ad8..00000000000 --- a/runtime/common/src/weights.rs +++ /dev/null @@ -1,308 +0,0 @@ -use gear_core::{ - costs::{CostOf, LazyPagesCosts}, - pages::GearPagesAmount, -}; -use pallet_gear::{InstructionWeights, MemoryWeights, SyscallWeights}; - -const INSTRUCTIONS_SPREAD: u8 = 50; -const SYSCALL_SPREAD: u8 = 10; -const PAGES_SPREAD: u8 = 10; - -#[track_caller] -fn check_spreading(weight: u64, expected: u64, spread: u8) { - let left = expected - expected * spread as u64 / 100; - let right = expected + expected * spread as u64 / 100; - - assert!( - left <= weight && weight <= right, - "Weight is {weight} ps. Expected weight is {expected} ps. {spread}% spread interval: [{left} ps, {right} ps]" - ); -} - -#[track_caller] -fn check_instruction_weight(weight: u32, expected: u32) { - check_spreading(weight.into(), expected.into(), INSTRUCTIONS_SPREAD); -} - -#[track_caller] -fn check_syscall_weight(weight: u64, expected: u64) { - check_spreading(weight, expected, SYSCALL_SPREAD); -} - -#[track_caller] -fn check_pages_weight(weight: u64, expected: u64) { - check_spreading(weight, expected, PAGES_SPREAD); -} - -/// Check that the weights of instructions are within the expected range -pub fn check_instructions_weights( - weights: InstructionWeights, - expected: InstructionWeights, -) { - check_instruction_weight(weights.i64const, expected.i64const); - check_instruction_weight(weights.i64load, expected.i64load); - check_instruction_weight(weights.i32load, expected.i32load); - check_instruction_weight(weights.i64store, expected.i64store); - check_instruction_weight(weights.i32store, expected.i32store); - check_instruction_weight(weights.select, expected.select); - check_instruction_weight(weights.r#if, expected.r#if); - check_instruction_weight(weights.br, expected.br); - check_instruction_weight(weights.br_if, expected.br_if); - check_instruction_weight(weights.br_table, expected.br_table); - check_instruction_weight(weights.br_table_per_entry, expected.br_table_per_entry); - check_instruction_weight(weights.call, expected.call); - check_instruction_weight(weights.call_indirect, expected.call_indirect); - check_instruction_weight( - weights.call_indirect_per_param, - expected.call_indirect_per_param, - ); - check_instruction_weight(weights.call_per_local, expected.call_per_local); - check_instruction_weight(weights.local_get, expected.local_get); - check_instruction_weight(weights.local_set, expected.local_set); - check_instruction_weight(weights.local_tee, expected.local_tee); - check_instruction_weight(weights.global_get, expected.global_get); - check_instruction_weight(weights.global_set, expected.global_set); - check_instruction_weight(weights.memory_current, expected.memory_current); - check_instruction_weight(weights.i64clz, expected.i64clz); - check_instruction_weight(weights.i32clz, expected.i32clz); - check_instruction_weight(weights.i64ctz, expected.i64ctz); - check_instruction_weight(weights.i32ctz, expected.i32ctz); - check_instruction_weight(weights.i64popcnt, expected.i64popcnt); - check_instruction_weight(weights.i32popcnt, expected.i32popcnt); - check_instruction_weight(weights.i64eqz, expected.i64eqz); - check_instruction_weight(weights.i32eqz, expected.i32eqz); - check_instruction_weight(weights.i32extend8s, expected.i32extend8s); - check_instruction_weight(weights.i32extend16s, expected.i32extend16s); - check_instruction_weight(weights.i64extend8s, expected.i64extend8s); - check_instruction_weight(weights.i64extend16s, expected.i64extend16s); - check_instruction_weight(weights.i64extend32s, expected.i64extend32s); - check_instruction_weight(weights.i64extendsi32, expected.i64extendsi32); - check_instruction_weight(weights.i64extendui32, expected.i64extendui32); - check_instruction_weight(weights.i32wrapi64, expected.i32wrapi64); - check_instruction_weight(weights.i64eq, expected.i64eq); - check_instruction_weight(weights.i32eq, expected.i32eq); - check_instruction_weight(weights.i64ne, expected.i64ne); - check_instruction_weight(weights.i32ne, expected.i32ne); - check_instruction_weight(weights.i64lts, expected.i64lts); - check_instruction_weight(weights.i32lts, expected.i32lts); - check_instruction_weight(weights.i64ltu, expected.i64ltu); - check_instruction_weight(weights.i32ltu, expected.i32ltu); - check_instruction_weight(weights.i64gts, expected.i64gts); - check_instruction_weight(weights.i32gts, expected.i32gts); - check_instruction_weight(weights.i64gtu, expected.i64gtu); - check_instruction_weight(weights.i32gtu, expected.i32gtu); - check_instruction_weight(weights.i64les, expected.i64les); - check_instruction_weight(weights.i32les, expected.i32les); - check_instruction_weight(weights.i64leu, expected.i64leu); - check_instruction_weight(weights.i32leu, expected.i32leu); - check_instruction_weight(weights.i64ges, expected.i64ges); - check_instruction_weight(weights.i32ges, expected.i32ges); - check_instruction_weight(weights.i64geu, expected.i64geu); - check_instruction_weight(weights.i32geu, expected.i32geu); - check_instruction_weight(weights.i64add, expected.i64add); - check_instruction_weight(weights.i32add, expected.i32add); - check_instruction_weight(weights.i64sub, expected.i64sub); - check_instruction_weight(weights.i32sub, expected.i32sub); - check_instruction_weight(weights.i64mul, expected.i64mul); - check_instruction_weight(weights.i32mul, expected.i32mul); - check_instruction_weight(weights.i64divs, expected.i64divs); - check_instruction_weight(weights.i32divs, expected.i32divs); - check_instruction_weight(weights.i64divu, expected.i64divu); - check_instruction_weight(weights.i32divu, expected.i32divu); - check_instruction_weight(weights.i64rems, expected.i64rems); - check_instruction_weight(weights.i32rems, expected.i32rems); - check_instruction_weight(weights.i64remu, expected.i64remu); - check_instruction_weight(weights.i32remu, expected.i32remu); - check_instruction_weight(weights.i64and, expected.i64and); - check_instruction_weight(weights.i32and, expected.i32and); - check_instruction_weight(weights.i64or, expected.i64or); - check_instruction_weight(weights.i32or, expected.i32or); - check_instruction_weight(weights.i64xor, expected.i64xor); - check_instruction_weight(weights.i32xor, expected.i32xor); - check_instruction_weight(weights.i64shl, expected.i64shl); - check_instruction_weight(weights.i32shl, expected.i32shl); - check_instruction_weight(weights.i64shrs, expected.i64shrs); - check_instruction_weight(weights.i32shrs, expected.i32shrs); - check_instruction_weight(weights.i64shru, expected.i64shru); - check_instruction_weight(weights.i32shru, expected.i32shru); - check_instruction_weight(weights.i64rotl, expected.i64rotl); - check_instruction_weight(weights.i32rotl, expected.i32rotl); - check_instruction_weight(weights.i64rotr, expected.i64rotr); - check_instruction_weight(weights.i32rotr, expected.i32rotr); -} - -/// Check that the weights of syscalls are within the expected range -pub fn check_syscall_weights( - weights: SyscallWeights, - expected: SyscallWeights, -) { - macro_rules! check { - ($inst_name:ident) => { - check_syscall_weight( - weights.$inst_name.ref_time(), - expected.$inst_name.ref_time(), - ); - }; - } - - check!(alloc); - check!(free); - check!(free_range); - check!(free_range_per_page); - check!(gr_reserve_gas); - check!(gr_unreserve_gas); - check!(gr_system_reserve_gas); - check!(gr_gas_available); - check!(gr_message_id); - check!(gr_program_id); - check!(gr_source); - check!(gr_value); - check!(gr_value_available); - check!(gr_size); - check!(gr_read); - check!(gr_read_per_byte); - check!(gr_env_vars); - check!(gr_block_height); - check!(gr_block_timestamp); - check!(gr_random); - check!(gr_reply_deposit); - check!(gr_send); - check!(gr_send_per_byte); - check!(gr_send_wgas); - check!(gr_send_wgas_per_byte); - check!(gr_send_init); - check!(gr_send_push); - check!(gr_send_push_per_byte); - check!(gr_send_commit); - check!(gr_send_commit_wgas); - check!(gr_reservation_send); - check!(gr_reservation_send_per_byte); - check!(gr_reservation_send_commit); - check!(gr_reply_commit); - check!(gr_reply_commit_wgas); - check!(gr_reservation_reply); - check!(gr_reservation_reply_per_byte); - check!(gr_reservation_reply_commit); - check!(gr_reply_push); - check!(gr_reply); - check!(gr_reply_per_byte); - check!(gr_reply_wgas); - check!(gr_reply_wgas_per_byte); - check!(gr_reply_push_per_byte); - check!(gr_reply_to); - check!(gr_signal_code); - check!(gr_signal_from); - check!(gr_reply_input); - check!(gr_reply_input_wgas); - check!(gr_reply_push_input); - check!(gr_reply_push_input_per_byte); - check!(gr_send_input); - check!(gr_send_input_wgas); - check!(gr_send_push_input); - check!(gr_send_push_input_per_byte); - check!(gr_debug); - check!(gr_debug_per_byte); - check!(gr_reply_code); - check!(gr_exit); - check!(gr_leave); - check!(gr_wait); - check!(gr_wait_for); - check!(gr_wait_up_to); - check!(gr_wake); - check!(gr_create_program); - check!(gr_create_program_payload_per_byte); - check!(gr_create_program_salt_per_byte); - check!(gr_create_program_wgas); - check!(gr_create_program_wgas_payload_per_byte); - check!(gr_create_program_wgas_salt_per_byte); -} - -/// Check that the lazy-pages costs are within the expected range -pub fn check_lazy_pages_costs( - lazy_pages_costs: LazyPagesCosts, - expected_lazy_pages_costs: LazyPagesCosts, -) { - check_pages_weight( - lazy_pages_costs.signal_read.cost_for_one(), - expected_lazy_pages_costs.signal_read.cost_for_one(), - ); - check_pages_weight( - lazy_pages_costs.signal_write.cost_for_one(), - expected_lazy_pages_costs.signal_write.cost_for_one(), - ); - check_pages_weight( - lazy_pages_costs.signal_write_after_read.cost_for_one(), - expected_lazy_pages_costs - .signal_write_after_read - .cost_for_one(), - ); - check_pages_weight( - lazy_pages_costs.host_func_read.cost_for_one(), - expected_lazy_pages_costs.host_func_read.cost_for_one(), - ); - check_pages_weight( - lazy_pages_costs.host_func_write.cost_for_one(), - expected_lazy_pages_costs.host_func_write.cost_for_one(), - ); - check_pages_weight( - lazy_pages_costs.host_func_write_after_read.cost_for_one(), - expected_lazy_pages_costs - .host_func_write_after_read - .cost_for_one(), - ); - check_pages_weight( - lazy_pages_costs.load_page_storage_data.cost_for_one(), - expected_lazy_pages_costs - .load_page_storage_data - .cost_for_one(), - ); -} - -/// Memory pages access costs. -pub struct PagesCosts { - pub load_page_data: CostOf, - pub upload_page_data: CostOf, - pub mem_grow: CostOf, - pub mem_grow_per_page: CostOf, - pub parachain_read_heuristic: CostOf, -} - -impl From> for PagesCosts { - fn from(val: MemoryWeights) -> Self { - Self { - load_page_data: val.load_page_data.ref_time().into(), - upload_page_data: val.upload_page_data.ref_time().into(), - mem_grow: val.mem_grow.ref_time().into(), - mem_grow_per_page: val.mem_grow_per_page.ref_time().into(), - parachain_read_heuristic: val.parachain_read_heuristic.ref_time().into(), - } - } -} - -/// Check that the pages costs are within the expected range -pub fn check_pages_costs(page_costs: PagesCosts, expected_page_costs: PagesCosts) { - check_pages_weight( - page_costs.load_page_data.cost_for_one(), - expected_page_costs.load_page_data.cost_for_one(), - ); - - check_pages_weight( - page_costs.upload_page_data.cost_for_one(), - expected_page_costs.upload_page_data.cost_for_one(), - ); - - check_pages_weight( - page_costs.mem_grow.cost_for_one(), - expected_page_costs.mem_grow.cost_for_one(), - ); - - check_pages_weight( - page_costs.mem_grow_per_page.cost_for_one(), - expected_page_costs.mem_grow_per_page.cost_for_one(), - ); - - check_pages_weight( - page_costs.parachain_read_heuristic.cost_for_one(), - expected_page_costs.parachain_read_heuristic.cost_for_one(), - ); -} diff --git a/runtime/vara/Cargo.toml b/runtime/vara/Cargo.toml index 98daa587c3d..1b38269eb0b 100644 --- a/runtime/vara/Cargo.toml +++ b/runtime/vara/Cargo.toml @@ -11,6 +11,9 @@ build = "build.rs" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] +[lints] +workspace = true + [dependencies] const-str.workspace = true log.workspace = true @@ -281,6 +284,5 @@ try-runtime = [ "pallet-bags-list/try-runtime", "runtime-common/try-runtime", ] -fuzz = ["common/fuzz", "pallet-gear/fuzz", "pallet-gear-gas/fuzz"] dev = ["pallet-gear-debug", "pallet-gear-eth-bridge", "pallet-sudo"] metadata-hash = ["substrate-wasm-builder?/metadata-hash"] diff --git a/runtime/vara/build.rs b/runtime/vara/build.rs index ba56362d007..4d6f35662e8 100644 --- a/runtime/vara/build.rs +++ b/runtime/vara/build.rs @@ -19,7 +19,7 @@ #[cfg(all(feature = "std", not(feature = "metadata-hash")))] fn main() { substrate_build_script_utils::generate_cargo_keys(); - #[cfg(all(feature = "std", not(feature = "fuzz")))] + #[cfg(all(feature = "std", not(fuzz)))] { substrate_wasm_builder::WasmBuilder::build_using_defaults() } @@ -28,10 +28,18 @@ fn main() { #[cfg(all(feature = "std", feature = "metadata-hash"))] fn main() { substrate_build_script_utils::generate_cargo_keys(); - #[cfg(all(feature = "std", not(feature = "fuzz")))] + #[cfg(all(feature = "std", not(fuzz)))] { + const TOKEN_SYMBOL: &str = if cfg!(not(feature = "dev")) { + "VARA" + } else { + "TVARA" + }; + + const DECIMALS: u8 = 12; + substrate_wasm_builder::WasmBuilder::init_with_defaults() - .enable_metadata_hash("VARA", 12) + .enable_metadata_hash(TOKEN_SYMBOL, DECIMALS) .build() } } diff --git a/runtime/vara/src/lib.rs b/runtime/vara/src/lib.rs index 60231156a55..126b3dabab6 100644 --- a/runtime/vara/src/lib.rs +++ b/runtime/vara/src/lib.rs @@ -24,7 +24,7 @@ #![allow(non_local_definitions)] // Make the WASM binary available. -#[cfg(all(feature = "std", not(feature = "fuzz")))] +#[cfg(all(feature = "std", not(fuzz)))] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); use common::{storage::Messenger, DelegateFee}; @@ -32,28 +32,6 @@ use frame_election_provider_support::{ bounds::ElectionBoundsBuilder, onchain, ElectionDataProvider, NposSolution, SequentialPhragmen, VoteWeight, }; -pub use frame_support::{ - construct_runtime, derive_impl, - dispatch::{DispatchClass, WeighData}, - genesis_builder_helper::{build_state, get_preset}, - parameter_types, - traits::{ - fungible::HoldConsideration, - tokens::{PayFromAccount, UnityAssetBalanceConversion}, - ConstU128, ConstU16, ConstU32, Contains, Currency, EitherOf, EitherOfDiverse, - EqualPrivilegeOnly, Everything, FindAuthor, InstanceFilter, KeyOwnerProofSystem, - LinearStoragePrice, LockIdentifier, Nothing, OnUnbalanced, Randomness, StorageInfo, - VariantCountOf, WithdrawReasons, - }, - weights::{ - constants::{ - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_MILLIS, - WEIGHT_REF_TIME_PER_SECOND, - }, - Weight, - }, - PalletId, StorageValue, -}; use frame_support::{ dispatch::DispatchInfo, pallet_prelude::{ @@ -67,46 +45,20 @@ use frame_system::{ }; use gbuiltin_proxy::ProxyType as BuiltinProxyType; use pallet_election_provider_multi_phase::{GeometricDepositBase, SolutionAccuracyOf}; -pub use pallet_gear::manager::{ExtManager, HandleKind}; use pallet_gear_builtin::ActorWithId; -pub use pallet_gear_payment::CustomChargeTransactionPayment; -pub use pallet_gear_staking_rewards::StakingBlackList; use pallet_grandpa::{ fg_primitives, AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList, }; use pallet_identity::legacy::IdentityInfo; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_session::historical::{self as pallet_session_historical}; -pub use pallet_timestamp::Call as TimestampCall; -#[allow(deprecated)] -pub use pallet_transaction_payment::{ - CurrencyAdapter, FeeDetails, Multiplier, RuntimeDispatchInfo, -}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use runtime_common::constants::BANK_ADDRESS; -pub use runtime_common::{ - constants::{ - RENT_DISABLED_DELTA_WEEK_FACTOR, RENT_FREE_PERIOD_MONTH_FACTOR, RENT_RESUME_WEEK_FACTOR, - RESUME_SESSION_DURATION_HOUR_FACTOR, - }, - impl_runtime_apis_plus_common, BlockHashCount, DealWithFees, AVERAGE_ON_INITIALIZE_RATIO, - GAS_LIMIT_MIN_PERCENTAGE_NUM, NORMAL_DISPATCH_LENGTH_RATIO, NORMAL_DISPATCH_WEIGHT_RATIO, - VALUE_PER_GAS, -}; -pub use runtime_primitives::{AccountId, Signature, VARA_SS58_PREFIX}; use runtime_primitives::{Balance, BlockNumber, Hash, Moment, Nonce}; use scale_info::TypeInfo; use sp_api::impl_runtime_apis; -#[cfg(any(feature = "std", test))] -use sp_api::{CallApiAt, CallContext, ProofRecorder}; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_core::{crypto::KeyTypeId, ConstBool, ConstU64, ConstU8, OpaqueMetadata, H256}; -#[cfg(any(feature = "std", test))] -use sp_externalities::Extensions; -#[cfg(any(feature = "std", test))] -use sp_runtime::traits::HashingFor; -#[cfg(not(feature = "dev"))] -use sp_runtime::traits::OpaqueKeys; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, traits::{ @@ -116,33 +68,80 @@ use sp_runtime::{ transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity}, ApplyExtrinsicResult, FixedU128, Perbill, Percent, Permill, Perquintill, RuntimeDebug, }; -#[cfg(any(feature = "std", test))] -use sp_state_machine::OverlayedChanges; use sp_std::{ convert::{TryFrom, TryInto}, prelude::*, }; -#[cfg(feature = "std")] -use sp_version::NativeVersion; use sp_version::RuntimeVersion; +#[cfg(not(feature = "dev"))] +use sp_runtime::traits::OpaqueKeys; + #[cfg(any(feature = "std", test))] -pub use frame_system::Call as SystemCall; -#[cfg(any(feature = "std", test))] -pub use pallet_balances::Call as BalancesCall; -#[cfg(any(feature = "std", test))] -pub use pallet_staking::StakerStatus; -#[cfg(all(feature = "dev", any(feature = "std", test)))] -pub use pallet_sudo::Call as SudoCall; -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; +use { + sp_api::{CallApiAt, CallContext, ProofRecorder}, + sp_externalities::Extensions, + sp_runtime::traits::HashingFor, + sp_state_machine::OverlayedChanges, +}; pub use pallet_gear; -#[cfg(feature = "dev")] -pub use pallet_gear_debug; pub use pallet_gear_gas; pub use pallet_gear_payment; +#[cfg(feature = "dev")] +pub use pallet_gear_debug; + +pub use frame_support::{ + construct_runtime, derive_impl, + dispatch::{DispatchClass, WeighData}, + genesis_builder_helper::{build_state, get_preset}, + parameter_types, + traits::{ + fungible::HoldConsideration, + tokens::{PayFromAccount, UnityAssetBalanceConversion}, + ConstU128, ConstU16, ConstU32, Contains, Currency, EitherOf, EitherOfDiverse, + EqualPrivilegeOnly, Everything, FindAuthor, InstanceFilter, KeyOwnerProofSystem, + LinearStoragePrice, LockIdentifier, Nothing, OnUnbalanced, Randomness, StorageInfo, + VariantCountOf, WithdrawReasons, + }, + weights::{ + constants::{ + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_MILLIS, + WEIGHT_REF_TIME_PER_SECOND, + }, + Weight, + }, + PalletId, StorageValue, +}; +pub use pallet_gear::manager::{ExtManager, HandleKind}; +pub use pallet_gear_payment::CustomChargeTransactionPayment; +pub use pallet_gear_staking_rewards::StakingBlackList; +#[allow(deprecated)] +pub use pallet_transaction_payment::{ + CurrencyAdapter, FeeDetails, Multiplier, RuntimeDispatchInfo, +}; +pub use runtime_common::{ + constants::{ + RENT_DISABLED_DELTA_WEEK_FACTOR, RENT_FREE_PERIOD_MONTH_FACTOR, RENT_RESUME_WEEK_FACTOR, + RESUME_SESSION_DURATION_HOUR_FACTOR, + }, + impl_runtime_apis_plus_common, BlockHashCount, DealWithFees, AVERAGE_ON_INITIALIZE_RATIO, + GAS_LIMIT_MIN_PERCENTAGE_NUM, NORMAL_DISPATCH_LENGTH_RATIO, NORMAL_DISPATCH_WEIGHT_RATIO, + VALUE_PER_GAS, +}; +pub use runtime_primitives::{AccountId, Signature, VARA_SS58_PREFIX}; + +#[cfg(all(feature = "dev", any(feature = "std", test)))] +pub use pallet_sudo::Call as SudoCall; + +#[cfg(any(feature = "std", test))] +pub use { + frame_system::Call as SystemCall, pallet_balances::Call as BalancesCall, + pallet_staking::StakerStatus, pallet_timestamp::Call as TimestampCall, + sp_runtime::BuildStorage, +}; + pub mod constants; pub use constants::{currency::*, time::*}; @@ -175,19 +174,36 @@ static _DEV_RUNTIME: u8 = 0; static _WASM_BLOB_VERSION: [u8; const_str::to_byte_array!(env!("SUBSTRATE_CLI_IMPL_VERSION")) .len()] = const_str::to_byte_array!(env!("SUBSTRATE_CLI_IMPL_VERSION")); +/// Vara Network runtime version. +#[cfg(not(feature = "dev"))] #[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("vara"), impl_name: create_runtime_str!("vara"), - authoring_version: 1, - // The version of the runtime specification. A full node will not attempt to use its native - // runtime in substitute for the on-chain Wasm runtime unless all of `spec_name`, - // `spec_version`, and `authoring_version` are the same between Wasm and native. + spec_version: 1700, - impl_version: 1, + apis: RUNTIME_API_VERSIONS, + authoring_version: 1, + impl_version: 1, + state_version: 1, transaction_version: 1, +}; + +/// Vara Network Testnet (and dev) runtime version. +#[cfg(feature = "dev")] +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("vara-testnet"), + impl_name: create_runtime_str!("vara-testnet"), + + spec_version: 1701, + + apis: RUNTIME_API_VERSIONS, + authoring_version: 1, + impl_version: 1, state_version: 1, + transaction_version: 1, }; /// The BABE epoch configuration at genesis. @@ -210,16 +226,6 @@ const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( u64::MAX, ); -/// The version information used to identify this runtime when compiled natively. - -#[cfg(any(feature = "std", test))] -pub fn native_version() -> NativeVersion { - NativeVersion { - runtime_version: VERSION, - can_author_with: Default::default(), - } -} - parameter_types! { pub const Version: RuntimeVersion = VERSION; pub const SS58Prefix: u8 = VARA_SS58_PREFIX; diff --git a/runtime/vara/src/tests.rs b/runtime/vara/src/tests/mod.rs similarity index 86% rename from runtime/vara/src/tests.rs rename to runtime/vara/src/tests/mod.rs index 0e3b5b50360..ddf923520ad 100644 --- a/runtime/vara/src/tests.rs +++ b/runtime/vara/src/tests/mod.rs @@ -16,19 +16,21 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +//! Weight tests for the runtime. + use super::*; use crate::Runtime; use frame_support::dispatch::GetDispatchInfo; use frame_system::limits::WeightsPerClass; -use gear_core::costs::LazyPagesCosts; +use gear_core::costs::{IoCosts, LazyPagesCosts, PagesCosts}; use pallet_gear::{InstructionWeights, MemoryWeights, SyscallWeights}; use pallet_staking::WeightInfo as _; -use runtime_common::weights::{ - check_instructions_weights, check_lazy_pages_costs, check_pages_costs, check_syscall_weights, - PagesCosts, -}; use sp_runtime::AccountId32; +mod utils; + +use utils::*; + #[cfg(feature = "dev")] #[test] fn bridge_storages_have_correct_prefixes() { @@ -226,7 +228,10 @@ fn instruction_weights_heuristics_test() { i32rotr: 300, }; - check_instructions_weights(weights, expected_weights); + let result = check_instructions_weights(weights, expected_weights); + + assert!(result.is_ok(), "{:#?}", result.err().unwrap()); + assert_eq!(result.unwrap(), expected_instructions_weights_count()); } #[test] @@ -307,12 +312,15 @@ fn syscall_weights_test() { _phantom: Default::default(), }; - check_syscall_weights(weights, expected); + let result = check_syscall_weights(weights, expected); + + assert!(result.is_ok(), "{:#?}", result.err().unwrap()); + assert_eq!(result.unwrap(), expected_syscall_weights_count()); } #[test] fn page_costs_heuristic_test() { - let page_costs: PagesCosts = MemoryWeights::::default().into(); + let io_costs: IoCosts = MemoryWeights::::default().into(); let expected_page_costs = PagesCosts { load_page_data: 10_000_000.into(), @@ -322,12 +330,15 @@ fn page_costs_heuristic_test() { parachain_read_heuristic: 0.into(), }; - check_pages_costs(page_costs, expected_page_costs); + let result = check_pages_costs(io_costs.common, expected_page_costs); + + assert!(result.is_ok(), "{:#?}", result.err().unwrap()); + assert_eq!(result.unwrap(), expected_pages_costs_count()); } #[test] fn lazy_page_costs_heuristic_test() { - let lazy_pages_costs: LazyPagesCosts = MemoryWeights::::default().into(); + let io_costs: IoCosts = MemoryWeights::::default().into(); let expected_lazy_pages_costs = LazyPagesCosts { signal_read: 28_000_000.into(), @@ -339,21 +350,33 @@ fn lazy_page_costs_heuristic_test() { load_page_storage_data: 10_000_000.into(), }; - check_lazy_pages_costs(lazy_pages_costs, expected_lazy_pages_costs); + let result = check_lazy_pages_costs(io_costs.lazy_pages, expected_lazy_pages_costs); + + assert!(result.is_ok(), "{:#?}", result.err().unwrap()); + assert_eq!(result.unwrap(), expected_lazy_pages_costs_count()); } /// Check that it is not possible to write/change memory pages too cheaply, /// because this may cause runtime heap memory overflow. #[test] fn write_is_not_too_cheap() { - let costs: LazyPagesCosts = MemoryWeights::::default().into(); + let costs: IoCosts = MemoryWeights::::default().into(); + + #[allow(clippy::unnecessary_min_or_max)] let cheapest_write = u64::MAX - .min(costs.signal_write.cost_for_one()) - .min(costs.signal_read.cost_for_one() + costs.signal_write_after_read.cost_for_one()) - .min(costs.host_func_write.cost_for_one()) - .min(costs.host_func_read.cost_for_one() + costs.host_func_write_after_read.cost_for_one()); + .min(costs.lazy_pages.signal_write.cost_for_one()) + .min( + costs.lazy_pages.signal_read.cost_for_one() + + costs.lazy_pages.signal_write_after_read.cost_for_one(), + ) + .min(costs.lazy_pages.host_func_write.cost_for_one()) + .min( + costs.lazy_pages.host_func_read.cost_for_one() + + costs.lazy_pages.host_func_write_after_read.cost_for_one(), + ); - let block_max_gas = 3 * 10 ^ 12; // 3 seconds + let block_max_gas = 3 * (10 ^ 12); // 3 seconds let runtime_heap_size_in_wasm_pages = 0x4000; // 1GB + assert!((block_max_gas / cheapest_write) < runtime_heap_size_in_wasm_pages); } diff --git a/runtime/vara/src/tests/utils.rs b/runtime/vara/src/tests/utils.rs new file mode 100644 index 00000000000..f62375b064f --- /dev/null +++ b/runtime/vara/src/tests/utils.rs @@ -0,0 +1,545 @@ +// This file is part of Gear. + +// Copyright (C) 2021-2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::*; +use crate::Runtime; + +use gear_core::costs::{IoCosts, LazyPagesCosts, PagesCosts}; +use pallet_gear::{InstructionWeights, MemoryWeights, SyscallWeights}; + +const INSTRUCTIONS_SPREAD: u8 = 50; +const SYSCALL_SPREAD: u8 = 10; +const PAGES_SPREAD: u8 = 10; + +/// Structure to hold weight expectation +pub(super) struct WeightExpectation { + weight: u64, + expected: u64, + spread: u8, + name: &'static str, +} + +impl WeightExpectation { + pub(super) fn new(weight: u64, expected: u64, spread: u8, name: &'static str) -> Self { + Self { + weight, + expected, + spread, + name, + } + } + + pub(super) fn check(&self) -> Result<(), String> { + let left = self.expected - self.expected * self.spread as u64 / 100; + let right = self.expected + self.expected * self.spread as u64 / 100; + + if left > self.weight || self.weight > right { + return Err(format!("[{}] instruction. Weight: {} ps. Expected: {} ps. {}% spread interval: [{left} ps, {right} ps]", self.name, self.weight, self.expected, self.spread)); + } + + Ok(()) + } +} + +pub(super) fn check_expectations(expectations: &[WeightExpectation]) -> Result> { + let errors = expectations + .iter() + .filter_map(|expectation| { + if let Err(err) = expectation.check() { + Some(err) + } else { + None + } + }) + .collect::>(); + + if errors.is_empty() { + Ok(expectations.len()) + } else { + Err(errors) + } +} + +pub(super) fn expected_instructions_weights_count() -> usize { + let InstructionWeights { + i64const: _, + i64load: _, + i32load: _, + i64store: _, + i32store: _, + select: _, + r#if: _, + br: _, + br_if: _, + br_table: _, + br_table_per_entry: _, + call: _, + call_indirect: _, + call_indirect_per_param: _, + call_per_local: _, + local_get: _, + local_set: _, + local_tee: _, + global_get: _, + global_set: _, + memory_current: _, + i64clz: _, + i32clz: _, + i64ctz: _, + i32ctz: _, + i64popcnt: _, + i32popcnt: _, + i64eqz: _, + i32eqz: _, + i32extend8s: _, + i32extend16s: _, + i64extend8s: _, + i64extend16s: _, + i64extend32s: _, + i64extendsi32: _, + i64extendui32: _, + i32wrapi64: _, + i64eq: _, + i32eq: _, + i64ne: _, + i32ne: _, + i64lts: _, + i32lts: _, + i64ltu: _, + i32ltu: _, + i64gts: _, + i32gts: _, + i64gtu: _, + i32gtu: _, + i64les: _, + i32les: _, + i64leu: _, + i32leu: _, + i64ges: _, + i32ges: _, + i64geu: _, + i32geu: _, + i64add: _, + i32add: _, + i64sub: _, + i32sub: _, + i64mul: _, + i32mul: _, + i64divs: _, + i32divs: _, + i64divu: _, + i32divu: _, + i64rems: _, + i32rems: _, + i64remu: _, + i32remu: _, + i64and: _, + i32and: _, + i64or: _, + i32or: _, + i64xor: _, + i32xor: _, + i64shl: _, + i32shl: _, + i64shrs: _, + i32shrs: _, + i64shru: _, + i32shru: _, + i64rotl: _, + i32rotl: _, + i64rotr: _, + i32rotr: _, + version: _, + _phantom: _, + } = InstructionWeights::::default(); + + // total number of instructions + 87 +} + +pub(super) fn expected_syscall_weights_count() -> usize { + let SyscallWeights { + alloc: _, + free: _, + free_range: _, + free_range_per_page: _, + gr_reserve_gas: _, + gr_unreserve_gas: _, + gr_system_reserve_gas: _, + gr_gas_available: _, + gr_message_id: _, + gr_program_id: _, + gr_source: _, + gr_value: _, + gr_value_available: _, + gr_size: _, + gr_read: _, + gr_read_per_byte: _, + gr_env_vars: _, + gr_block_height: _, + gr_block_timestamp: _, + gr_random: _, + gr_reply_deposit: _, + gr_send: _, + gr_send_per_byte: _, + gr_send_wgas: _, + gr_send_wgas_per_byte: _, + gr_send_init: _, + gr_send_push: _, + gr_send_push_per_byte: _, + gr_send_commit: _, + gr_send_commit_wgas: _, + gr_reservation_send: _, + gr_reservation_send_per_byte: _, + gr_reservation_send_commit: _, + gr_reply_commit: _, + gr_reply_commit_wgas: _, + gr_reservation_reply: _, + gr_reservation_reply_per_byte: _, + gr_reservation_reply_commit: _, + gr_reply_push: _, + gr_reply: _, + gr_reply_per_byte: _, + gr_reply_wgas: _, + gr_reply_wgas_per_byte: _, + gr_reply_push_per_byte: _, + gr_reply_to: _, + gr_signal_code: _, + gr_signal_from: _, + gr_reply_input: _, + gr_reply_input_wgas: _, + gr_reply_push_input: _, + gr_reply_push_input_per_byte: _, + gr_send_input: _, + gr_send_input_wgas: _, + gr_send_push_input: _, + gr_send_push_input_per_byte: _, + gr_debug: _, + gr_debug_per_byte: _, + gr_reply_code: _, + gr_exit: _, + gr_leave: _, + gr_wait: _, + gr_wait_for: _, + gr_wait_up_to: _, + gr_wake: _, + gr_create_program: _, + gr_create_program_payload_per_byte: _, + gr_create_program_salt_per_byte: _, + gr_create_program_wgas: _, + gr_create_program_wgas_payload_per_byte: _, + gr_create_program_wgas_salt_per_byte: _, + _phantom: __phantom, + } = SyscallWeights::::default(); + + // total number of syscalls + 70 +} + +pub(super) fn expected_pages_costs_count() -> usize { + let IoCosts { + lazy_pages: _, + common: + PagesCosts { + load_page_data: _, + upload_page_data: _, + mem_grow: _, + mem_grow_per_page: _, + parachain_read_heuristic: _, + }, + } = MemoryWeights::::default().into(); + + // total number of lazy pages costs + 5 +} + +pub(super) fn expected_lazy_pages_costs_count() -> usize { + let IoCosts { + common: _, + lazy_pages: + LazyPagesCosts { + signal_read: _, + signal_write: _, + signal_write_after_read: _, + host_func_read: _, + host_func_write: _, + host_func_write_after_read: _, + load_page_storage_data: _, + }, + } = MemoryWeights::::default().into(); + + // total number of lazy pages costs + 7 +} + +/// Check that the weights of instructions are within the expected range +pub(super) fn check_instructions_weights( + weights: InstructionWeights, + expected: InstructionWeights, +) -> Result> { + macro_rules! expectation { + ($inst_name:ident) => { + WeightExpectation::new( + weights.$inst_name.into(), + expected.$inst_name.into(), + INSTRUCTIONS_SPREAD, + stringify!($inst_name), + ) + }; + } + + let expectations = vec![ + expectation!(i64const), + expectation!(i64load), + expectation!(i32load), + expectation!(i64store), + expectation!(i32store), + expectation!(select), + expectation!(r#if), + expectation!(br), + expectation!(br_if), + expectation!(br_table), + expectation!(br_table_per_entry), + expectation!(call), + expectation!(call_indirect), + expectation!(call_indirect_per_param), + expectation!(call_per_local), + expectation!(local_get), + expectation!(local_set), + expectation!(local_tee), + expectation!(global_get), + expectation!(global_set), + expectation!(memory_current), + expectation!(i64clz), + expectation!(i32clz), + expectation!(i64ctz), + expectation!(i32ctz), + expectation!(i64popcnt), + expectation!(i32popcnt), + expectation!(i64eqz), + expectation!(i32eqz), + expectation!(i32extend8s), + expectation!(i32extend16s), + expectation!(i64extend8s), + expectation!(i64extend16s), + expectation!(i64extend32s), + expectation!(i64extendsi32), + expectation!(i64extendui32), + expectation!(i32wrapi64), + expectation!(i64eq), + expectation!(i32eq), + expectation!(i64ne), + expectation!(i32ne), + expectation!(i64lts), + expectation!(i32lts), + expectation!(i64ltu), + expectation!(i32ltu), + expectation!(i64gts), + expectation!(i32gts), + expectation!(i64gtu), + expectation!(i32gtu), + expectation!(i64les), + expectation!(i32les), + expectation!(i64leu), + expectation!(i32leu), + expectation!(i64ges), + expectation!(i32ges), + expectation!(i64geu), + expectation!(i32geu), + expectation!(i64add), + expectation!(i32add), + expectation!(i64sub), + expectation!(i32sub), + expectation!(i64mul), + expectation!(i32mul), + expectation!(i64divs), + expectation!(i32divs), + expectation!(i64divu), + expectation!(i32divu), + expectation!(i64rems), + expectation!(i32rems), + expectation!(i64remu), + expectation!(i32remu), + expectation!(i64and), + expectation!(i32and), + expectation!(i64or), + expectation!(i32or), + expectation!(i64xor), + expectation!(i32xor), + expectation!(i64shl), + expectation!(i32shl), + expectation!(i64shrs), + expectation!(i32shrs), + expectation!(i64shru), + expectation!(i32shru), + expectation!(i64rotl), + expectation!(i32rotl), + expectation!(i64rotr), + expectation!(i32rotr), + ]; + + check_expectations(&expectations) +} + +/// Check that the weights of syscalls are within the expected range +pub(super) fn check_syscall_weights( + weights: SyscallWeights, + expected: SyscallWeights, +) -> Result> { + macro_rules! expectation { + ($inst_name:ident) => { + WeightExpectation::new( + weights.$inst_name.ref_time(), + expected.$inst_name.ref_time(), + SYSCALL_SPREAD, + stringify!($inst_name), + ) + }; + } + + let expectations = vec![ + expectation!(alloc), + expectation!(free), + expectation!(free_range), + expectation!(free_range_per_page), + expectation!(gr_reserve_gas), + expectation!(gr_unreserve_gas), + expectation!(gr_system_reserve_gas), + expectation!(gr_gas_available), + expectation!(gr_message_id), + expectation!(gr_program_id), + expectation!(gr_source), + expectation!(gr_value), + expectation!(gr_value_available), + expectation!(gr_size), + expectation!(gr_read), + expectation!(gr_read_per_byte), + expectation!(gr_env_vars), + expectation!(gr_block_height), + expectation!(gr_block_timestamp), + expectation!(gr_random), + expectation!(gr_reply_deposit), + expectation!(gr_send), + expectation!(gr_send_per_byte), + expectation!(gr_send_wgas), + expectation!(gr_send_wgas_per_byte), + expectation!(gr_send_init), + expectation!(gr_send_push), + expectation!(gr_send_push_per_byte), + expectation!(gr_send_commit), + expectation!(gr_send_commit_wgas), + expectation!(gr_reservation_send), + expectation!(gr_reservation_send_per_byte), + expectation!(gr_reservation_send_commit), + expectation!(gr_reply_commit), + expectation!(gr_reply_commit_wgas), + expectation!(gr_reservation_reply), + expectation!(gr_reservation_reply_per_byte), + expectation!(gr_reservation_reply_commit), + expectation!(gr_reply_push), + expectation!(gr_reply), + expectation!(gr_reply_per_byte), + expectation!(gr_reply_wgas), + expectation!(gr_reply_wgas_per_byte), + expectation!(gr_reply_push_per_byte), + expectation!(gr_reply_to), + expectation!(gr_signal_code), + expectation!(gr_signal_from), + expectation!(gr_reply_input), + expectation!(gr_reply_input_wgas), + expectation!(gr_reply_push_input), + expectation!(gr_reply_push_input_per_byte), + expectation!(gr_send_input), + expectation!(gr_send_input_wgas), + expectation!(gr_send_push_input), + expectation!(gr_send_push_input_per_byte), + expectation!(gr_debug), + expectation!(gr_debug_per_byte), + expectation!(gr_reply_code), + expectation!(gr_exit), + expectation!(gr_leave), + expectation!(gr_wait), + expectation!(gr_wait_for), + expectation!(gr_wait_up_to), + expectation!(gr_wake), + expectation!(gr_create_program), + expectation!(gr_create_program_payload_per_byte), + expectation!(gr_create_program_salt_per_byte), + expectation!(gr_create_program_wgas), + expectation!(gr_create_program_wgas_payload_per_byte), + expectation!(gr_create_program_wgas_salt_per_byte), + ]; + + check_expectations(&expectations) +} + +/// Check that the lazy-pages costs are within the expected range +pub(super) fn check_lazy_pages_costs( + lazy_pages_costs: LazyPagesCosts, + expected_lazy_pages_costs: LazyPagesCosts, +) -> Result> { + macro_rules! expectation { + ($inst_name:ident) => { + WeightExpectation::new( + lazy_pages_costs.$inst_name.cost_for_one(), + expected_lazy_pages_costs.$inst_name.cost_for_one(), + PAGES_SPREAD, + stringify!($inst_name), + ) + }; + } + + let expectations = vec![ + expectation!(signal_read), + expectation!(signal_write), + expectation!(signal_write_after_read), + expectation!(host_func_read), + expectation!(host_func_write), + expectation!(host_func_write_after_read), + expectation!(load_page_storage_data), + ]; + + check_expectations(&expectations) +} + +/// Check that the pages costs are within the expected range +pub(super) fn check_pages_costs( + page_costs: PagesCosts, + expected_page_costs: PagesCosts, +) -> Result> { + macro_rules! expectation { + ($inst_name:ident) => { + WeightExpectation::new( + page_costs.$inst_name.cost_for_one(), + expected_page_costs.$inst_name.cost_for_one(), + PAGES_SPREAD, + stringify!($inst_name), + ) + }; + } + + let expectations = vec![ + expectation!(load_page_data), + expectation!(upload_page_data), + expectation!(mem_grow), + expectation!(mem_grow_per_page), + expectation!(parachain_read_heuristic), + ]; + + check_expectations(&expectations) +} diff --git a/scripts/src/build.sh b/scripts/src/build.sh index 25948780258..d2c2dcb502f 100755 --- a/scripts/src/build.sh +++ b/scripts/src/build.sh @@ -26,11 +26,11 @@ EOF } gear_build() { - $CARGO build --workspace "$@" --exclude runtime-fuzzer --exclude runtime-fuzzer-fuzz + $CARGO build --workspace "$@" } fuzzer_build() { - $CARGO build "$@" -p runtime-fuzzer -p runtime-fuzzer-fuzz + RUSTFLAGS="--cfg fuzz" $CARGO build "$@" -p runtime-fuzzer -p runtime-fuzzer-fuzz } node_build() { diff --git a/scripts/src/check.sh b/scripts/src/check.sh index e4b211339fa..2a37b6c2a54 100755 --- a/scripts/src/check.sh +++ b/scripts/src/check.sh @@ -20,11 +20,11 @@ EOF } gear_check() { - echo " >> Check workspace without crates that use runtime with 'fuzz' feature" - __GEAR_WASM_BUILDER_NO_BUILD=1 SKIP_WASM_BUILD=1 SKIP_VARA_RUNTIME_WASM_BUILD=1 cargo check --workspace "$@" --exclude runtime-fuzzer --exclude runtime-fuzzer-fuzz + echo " >> Check workspace" + __GEAR_WASM_BUILDER_NO_BUILD=1 SKIP_WASM_BUILD=1 SKIP_VARA_RUNTIME_WASM_BUILD=1 cargo check --workspace "$@" - echo " >> Check crates that use runtime with 'fuzz' feature" - cargo check "$@" -p runtime-fuzzer -p runtime-fuzzer-fuzz + echo " >> Check crates that use 'cfg(fuzz)" + RUSTFLAGS="--cfg fuzz" cargo check "$@" -p gear-common -p vara-runtime -p runtime-fuzzer -p runtime-fuzzer-fuzz } runtime_imports() { diff --git a/scripts/src/clippy.sh b/scripts/src/clippy.sh index e056e95ec87..718e5d9622d 100755 --- a/scripts/src/clippy.sh +++ b/scripts/src/clippy.sh @@ -20,11 +20,7 @@ EOF } gear_clippy() { - EXCLUDE_PACKAGES="--exclude vara-runtime --exclude runtime-fuzzer --exclude runtime-fuzzer-fuzz" - INCLUDE_PACKAGES="-p vara-runtime -p runtime-fuzzer -p runtime-fuzzer-fuzz" - - __GEAR_WASM_BUILDER_NO_BUILD=1 SKIP_WASM_BUILD=1 SKIP_VARA_RUNTIME_WASM_BUILD=1 cargo clippy --workspace "$@" $EXCLUDE_PACKAGES -- --no-deps -D warnings - __GEAR_WASM_BUILDER_NO_BUILD=1 SKIP_WASM_BUILD=1 SKIP_VARA_RUNTIME_WASM_BUILD=1 cargo clippy $INCLUDE_PACKAGES --all-features -- --no-deps -D warnings + __GEAR_WASM_BUILDER_NO_BUILD=1 SKIP_WASM_BUILD=1 SKIP_VARA_RUNTIME_WASM_BUILD=1 cargo clippy --workspace "$@" -- --no-deps -D warnings } examples_clippy() { diff --git a/scripts/src/test.sh b/scripts/src/test.sh index add4990a734..47956691a38 100755 --- a/scripts/src/test.sh +++ b/scripts/src/test.sh @@ -99,7 +99,8 @@ run_fuzzer() { fi # Run fuzzer - RUST_LOG="$LOG_TARGETS" cargo fuzz run --release --sanitizer=none main $CORPUS_DIR -- -rss_limit_mb=$RSS_LIMIT_MB -max_len=$MAX_LEN -len_control=0 + RUSTFLAGS="--cfg fuzz" RUST_LOG="$LOG_TARGETS" \ + cargo fuzz run --release --sanitizer=none main $CORPUS_DIR -- -rss_limit_mb=$RSS_LIMIT_MB -max_len=$MAX_LEN -len_control=0 } run_lazy_pages_fuzzer() { @@ -107,6 +108,7 @@ run_lazy_pages_fuzzer() { ROOT_DIR="$1" CORPUS_DIR="$2" + RUSTFLAGS="--cfg fuzz" # Navigate to lazy pages fuzzer dir cd $ROOT_DIR/utils/lazy-pages-fuzzer @@ -122,7 +124,7 @@ run_lazy_pages_fuzzer() { run_fuzzer_tests() { # This includes property tests for runtime-fuzzer. - cargo nextest run -p runtime-fuzzer + RUSTFLAGS="--cfg fuzz" cargo nextest run -p runtime-fuzzer } # TODO this is likely to be merged with `pallet_test` or `workspace_test` in #1802 @@ -134,7 +136,7 @@ doc_test() { MANIFEST="$1" shift - __GEAR_WASM_BUILDER_NO_BUILD=1 SKIP_WASM_BUILD=1 SKIP_VARA_RUNTIME_WASM_BUILD=1 $CARGO test --doc --workspace --exclude runtime-fuzzer --exclude runtime-fuzzer-fuzz --manifest-path="$MANIFEST" --no-fail-fast "$@" + __GEAR_WASM_BUILDER_NO_BUILD=1 SKIP_WASM_BUILD=1 SKIP_VARA_RUNTIME_WASM_BUILD=1 $CARGO test --doc --workspace --manifest-path="$MANIFEST" --no-fail-fast "$@" } time_consuming_tests() { diff --git a/stack-buffer/Cargo.toml b/stack-buffer/Cargo.toml index e2d6ed4e15d..af98011cc74 100644 --- a/stack-buffer/Cargo.toml +++ b/stack-buffer/Cargo.toml @@ -2,10 +2,12 @@ name = "gear-stack-buffer" description = "Gear stack buffer implementation" documentation = "https://docs.rs/gear-stack-buffer" +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true rust-version.workspace = true [build-dependencies] diff --git a/utils/crates-io/src/publisher.rs b/utils/crates-io/src/publisher.rs index 440d6b910c1..fb065692f90 100644 --- a/utils/crates-io/src/publisher.rs +++ b/utils/crates-io/src/publisher.rs @@ -69,6 +69,41 @@ impl Publisher { continue; }; + if pkg.authors.is_empty() { + bail!("Package {name} has empty authors!"); + } + + if pkg + .description + .as_ref() + .map(|v| v.is_empty()) + .unwrap_or(true) + { + bail!("Package {name} has empty description!"); + } + + if pkg.license.is_none() { + bail!("Package {name} has empty license!"); + } + + // TODO #4125: disallow empty categories, keywords + + if pkg.repository.is_none() { + bail!("Package {name} has empty repository!"); + } + + if pkg.homepage.is_none() { + bail!("Package {name} has empty homepage!"); + } + + if pkg.documentation.is_none() { + bail!("Package {name} has empty documentation!"); + } + + if pkg.rust_version.is_none() { + bail!("Package {name} has empty rust-version!"); + } + let mut is_published = false; if verify { diff --git a/utils/gear-wasmer-cache/Cargo.toml b/utils/gear-wasmer-cache/Cargo.toml index c3ad428c8a2..828c892d222 100644 --- a/utils/gear-wasmer-cache/Cargo.toml +++ b/utils/gear-wasmer-cache/Cargo.toml @@ -1,5 +1,7 @@ [package] name = "gear-wasmer-cache" +description = "Wasmer executor's module caches used by Gear nodes" +documentation = "https://docs.rs/gear-wasmer-cache" version.workspace = true authors.workspace = true edition.workspace = true @@ -8,8 +10,8 @@ homepage.workspace = true repository.workspace = true rust-version.workspace = true -[lints.rust] -unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)'] } +[lints] +workspace = true [dependencies] wasmer.workspace = true diff --git a/utils/runtime-fuzzer/Cargo.toml b/utils/runtime-fuzzer/Cargo.toml index 91cdb5d1c76..af331305cfc 100644 --- a/utils/runtime-fuzzer/Cargo.toml +++ b/utils/runtime-fuzzer/Cargo.toml @@ -25,7 +25,7 @@ runtime-primitives.workspace = true gear-common.workspace = true gear-core.workspace = true gear-utils.workspace = true -vara-runtime = { workspace = true, features = ["std", "dev", "fuzz"] } +vara-runtime = { workspace = true, features = ["std", "dev"] } pallet-gear.workspace = true pallet-gear-bank.workspace = true diff --git a/utils/runtime-fuzzer/src/tests.rs b/utils/runtime-fuzzer/src/tests.rs index c1cd6a9fd16..539d397e85f 100644 --- a/utils/runtime-fuzzer/src/tests.rs +++ b/utils/runtime-fuzzer/src/tests.rs @@ -28,7 +28,7 @@ fn proptest_input_validity() { GearCallsGenerator::random_data_requirement() + BalanceManager::random_data_requirement(); assert!(MIN_GEAR_CALLS_BYTES >= min_unstructured_input_size); - assert!(MIN_GEAR_CALLS_BYTES <= MAX_GEAR_CALLS_BYTES); + const _: () = assert!(MIN_GEAR_CALLS_BYTES <= MAX_GEAR_CALLS_BYTES); } #[test] diff --git a/utils/ss58/Cargo.toml b/utils/ss58/Cargo.toml index 5734fe20893..ddaec74e965 100644 --- a/utils/ss58/Cargo.toml +++ b/utils/ss58/Cargo.toml @@ -2,10 +2,12 @@ name = "gear-ss58" description = "Gear implementation ss58 address format" documentation = "https://docs.rs/gear-ss58" +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true rust-version.workspace = true [dependencies] diff --git a/utils/wasm-builder/Cargo.toml b/utils/wasm-builder/Cargo.toml index 0a342ce01c5..cc0b9a8aa0c 100644 --- a/utils/wasm-builder/Cargo.toml +++ b/utils/wasm-builder/Cargo.toml @@ -2,9 +2,11 @@ name = "gear-wasm-builder" description = "Utility for building Gear programs" documentation = "https://docs.rs/gear-wasm-builder" -version.workspace = true edition.workspace = true +version.workspace = true +authors.workspace = true license.workspace = true +homepage.workspace = true repository.workspace = true rust-version.workspace = true include = ["build.rs", "src/**/*", "Cargo.toml", "README.md"] diff --git a/utils/wasm-optimizer/Cargo.toml b/utils/wasm-optimizer/Cargo.toml index 9d85e01fcf5..b791bdcd33b 100644 --- a/utils/wasm-optimizer/Cargo.toml +++ b/utils/wasm-optimizer/Cargo.toml @@ -3,12 +3,13 @@ name = "gear-wasm-optimizer" description = "Utility for optimizing Gear programs" documentation = "https://docs.rs/gear-wasm-optimizer" keywords = ["gear", "wasm"] +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true homepage.workspace = true repository.workspace = true +rust-version.workspace = true [dependencies] anyhow = { workspace = true, features = ["std"] } diff --git a/utils/wasm-proc/Cargo.toml b/utils/wasm-proc/Cargo.toml index 66dfd716e87..7e2329c244b 100644 --- a/utils/wasm-proc/Cargo.toml +++ b/utils/wasm-proc/Cargo.toml @@ -4,10 +4,12 @@ description = "Gear wasm processor" keywords = ["gear", "cli", "wasm"] categories = ["command-line-interface", "command-line-utilities", "wasm"] documentation = "https://docs.rs/wasm-proc" +edition.workspace = true version.workspace = true authors.workspace = true -edition.workspace = true license.workspace = true +homepage.workspace = true +repository.workspace = true rust-version.workspace = true [dependencies] diff --git a/utils/weight-diff/src/main.rs b/utils/weight-diff/src/main.rs index 51f4056d94d..684e01a3104 100644 --- a/utils/weight-diff/src/main.rs +++ b/utils/weight-diff/src/main.rs @@ -308,6 +308,8 @@ const TYPE_LIST: &[&str] = &[ "MemoryCosts", "RentCosts", "InstantiationCosts", + "IoCosts", + "PagesCosts", "LazyPagesCosts", ];